ページ 11

日本語のリアルタイム入力

Posted: 2010年12月18日(土) 17:27
by phobos
はじめまして。phobosです。よろしくお願いします。
早速なんですが、リアルタイムに文章入力の出来るプログラムを作っていて、
kbhitとgetchを使う方法を取っていたのですが、日本語をリアルタイム入力できるようにする
必要が出来てしまいました。
ですが、getchは日本語に対応しないということで、詰まってしまっています。
ですので、日本語をリアルタイム入力できる手法をご教授いただきたいです。
よろしくお願いします。

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 17:43
by みけCAT
まず、使用しているOSを教えてください。

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 17:59
by phobos
すみません、忘れてました。
Vistaで、VS2005を使ってます。

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 18:00
by non
どのような目的で必要なのでしょうか?

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 18:19
by ISLe
「日本語のリアルタイム入力」が示す仕様が曖昧ですね。
1) キートップにある文字を全角でも入力できるだけで良い
2) 漢字変換も必要(リアルタイムで無くなる気がしますが)
さて。

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 18:28
by phobos
2の、「 漢字変換も必要」の方です。

Re: 日本語のリアルタイム入力

Posted: 2010年12月18日(土) 18:46
by non

コード:

#include <stdio.h>
#include <conio.h>
int main(void)
{
	int key1,key2;
	char str[3]={'\0'};
	printf("Push any key\n");
	while(1){
		if(kbhit()){
			str[0]=key1 = getch();
			if(0x80<=key1 && key1<=0x9F || 0xE0<=key1 && key1<=0xFF){
				str[1]=key2 = getch();
				printf("%s",str);
			}
			else{
				putchar(key1);
				if(key1==0x0D){
					putchar('\n');
					break;
				}
			}
		}
	}
	return 0;
}
目的がわからないから違うかもしれないけど、シフトJISだと仮定して、テストプログラムを作りました。

Re: 日本語のリアルタイム入力

Posted: 2010年12月19日(日) 00:03
by ISLe
マルチバイト文字もgetch()して文字型配列に追加していくだけで問題ないですよね。
そのままputcharすれば表示もできますし。

IMEで確定するまでがリアルタイムにならないという問題なのであれば、リアルタイムに取得したキー入力に対応してプログラム内部でよみがな文字列を作ってImmGetConversionList APIに渡して漢字変換したものを表示するというふうにすれば良いと思います。