2004|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|11|12|
2011|01|
2014|05|08|

2009年12月04日(Friday) [長年日記]

_ [日記][コンピュータ] Google日本語入力(あとOnOffのキーの変更について)

機能リリースされたGoogle日本語入力(β)。

なかなか面白い、というかけっこう革命的ですね。

辞書に手動で登録していたら絶対登録されないような用語まで変換できてしまうのが新しい所。

おかげでネットスラングや固有名詞がいとも簡単に変換できます。

アニメや映画のセリフ、登場人物の名前なんかも変換されたり予測変換に出てきたりしていいのか悪いのかわかりませんが、とにかく変換範囲はとんでもなく広い。


適当にいろいろ試してみる遊びだけでも(今は)楽しい。


これ、普通にネットでブログ書いたりチャットしたりするのにとても便利な気がする。

上には上げませんでしたが、数学の定理とか工学の専門用語も普通変換できるはずのないものまで変換できます。 


ただ、「どうしてこうなった」ってのも多数。

というか今まさに「どうして」って入れたら「どうして君を好きになってしまったんだろう」って予測されたよ・・・・。

怖くて会社とか人前では使えないかもしれない。特に予測変換。

嘗める・・ってそんな漢字書くんだ・・・。


あと、これは悪いと捉えるか、間違った文章でも変換できると捉えるかによって評価が変わりますがいわゆる「よくある間違い」も変換してしまいます。

これは間違った日本語の氾濫を助長するという意味で批判する人が出そうですね。

間違う人は無理してでも間違った入力するからどうしようも無い気もしますが。

「玉石混淆」が正しいですが、「玉石混交」のほうがよくみかけるし変換候補でも上になってしまっていますね。

常用漢字じゃないので敢えて「混交」にしている場合が多いようです。

MSIMEで変換して「玉石混合」になっちゃっている場合もよくみかけますが、候補には出ず。明らかな間違いを排除する仕組みも入っているのでしょうか。


汚名はもしかしたら挽回しちゃいたい人もいるかもしれないし・・・いや居ないって。



で、大変面白いので家では使ってみようと思ったのですが、どういうわけかIMEのOnOffボタンを変更する機能がない(ように見える)

(やり方わかる人いたら教えてください)

普段英語キーボードを使っていて、コントロール+スペースでIMEのOn/Offを切り替えているのでかなり困る。


設定画面を開くと、「我々は頭いいですよ」的な英語表記のままの部分がイラッっとしますね。はい。

Conversion,Composition,Precomposition,Prediction,Suggestionって並べられても意味わからん。。

日本語でおk。(←予測変換されました・・・)



頑張って読んでみたけど、やっぱりダメっぽいのでコントロール+スペースが来たら漢字キーを投げるプログラムを作ってみた。

そのうちキーバインドの変更も対応してくれるかもしれない(そもそも出来るけど僕が分からないだけかもしれない)ので昼休みに10分で作りました。

そのうちちゃんと作りますが、今の状態だとソースいじらないとキーの変更もできないのでソース貼っておきます。


バイナリはこれ。

imeonoffkey.zip

立ち上げると音もなく小さなウインドウが最小化された状態で出るのであとはコントロール+スペースでどうぞ。

ウインドウが邪魔な件についてはしばらくたってもGoogleさんが対応してくれなかったらなんとかします。

     1 : 	#include<windows.h>
     2 : 	
     3 : 	//とりあえずキーの組み合わせ変えたい場合はここでどうぞ
     4 : 	//ホットキー(一緒に押すキー)
     5 : 	#define HOTKEY_fsModifiers		MOD_CONTROL		
     6 : 	//ホットキー(仮想キー)
     7 : 	#define HOTKEY_vk				VK_SPACE		
     8 : 	
     9 : 	
    10 : 	#define HOTKEY_ID_IMEONOFF	100
    11 : 	#define IMEONOFF_WIN_CLASS	"IMEOnOffClass"
    12 : 	LRESULT CALLBACK WndProc( HWND hwnd, UINT msg,
    13 :				 WPARAM wParam, LPARAM lParam ){
    14 : 	
    15 : 	    switch (msg) {
    16 : 			case WM_CREATE:
    17 : 				
    18 : 				::RegisterHotKey(hwnd,HOTKEY_ID_IMEONOFF,
    19 : 					MOD_CONTROL,VK_SPACE );
    20 : 				
    21 : 			
    22 : 				break;
    23 : 	        case WM_DESTROY:
    24 : 			
    25 : 				::UnregisterHotKey(hwnd,HOTKEY_ID_IMEONOFF);
    26 : 				PostQuitMessage(0);
    27 : 			
    28 : 	            break;
    29 : 			case WM_HOTKEY:
    30 : 				
    31 : 				if(wParam == HOTKEY_ID_IMEONOFF){
    32 : 					//[漢字キー]を送ってIMEを切り替える
    33 : 					INPUT input[1];
    34 : 					input[0].type = INPUT_KEYBOARD;
    35 : 					input[0].ki.wVk = VK_KANJI;
    36 : 					input[0].ki.wScan = MapVirtualKey(VK_KANJI,0);
    37 : 					input[0].ki.dwFlags = KEYEVENTF_EXTENDEDKEY;
    38 : 					input[0].ki.time = 0;
    39 : 					input[0].ki.dwExtraInfo = 0;
    40 : 					SendInput(1,input,sizeof(INPUT));
    41 : 					OutputDebugString("IMEOnOff\n");
    42 : 				}
    43 : 			
    44 : 				break;
    45 : 	        default:
    46 : 	            return(DefWindowProc(hwnd, msg, wParam, lParam));
    47 : 	    }
    48 : 	    return 0;
    49 : 	}
    50 : 	
    51 : 	
    52 : 	int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, 
    53 : 					   LPSTR lpszArgs, int nWinMode)
    54 : 	{
    55 : 		//やっつけでウインドウ作る
    56 : 		WNDCLASSEX wcl;
    57 : 		wcl.cbSize = sizeof(WNDCLASSEX); 
    58 : 		wcl.cbWndExtra	= 0;
    59 : 		wcl.cbClsExtra	= 0;
    60 : 		wcl.hInstance = hThisInst;
    61 : 		wcl.lpszClassName = IMEONOFF_WIN_CLASS;
    62 : 		wcl.lpfnWndProc = WndProc;
    63 : 		wcl.style =CS_HREDRAW | CS_VREDRAW;
    64 : 		wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    65 : 		wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); 
    66 : 		wcl.hCursor = LoadCursor(NULL, IDC_ARROW); 
    67 : 		wcl.lpszMenuName = NULL; 
    68 : 		wcl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH); 
    69 : 		if(!::RegisterClassEx(&wcl)) return 0;
    70 : 		HWND hwnd=	CreateWindowEx(
    71 : 			NULL,IMEONOFF_WIN_CLASS, "IMEOnOffWindow",
    72 : 			WS_OVERLAPPEDWINDOW, 
    73 : 			CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    74 : 			CW_USEDEFAULT,GetDesktopWindow(),
    75 : 			NULL,hThisInst, NULL
    76 : 			);
    77 : 		MoveWindow(hwnd,0,0,100,50,FALSE);
    78 : 		ShowWindow(hwnd,SW_MINIMIZE);
    79 : 		MSG msg;
    80 : 		while(GetMessage(&msg, NULL, 0, 0))
    81 : 		{
    82 : 			TranslateMessage(&msg);
    83 : 			DispatchMessage(&msg); 
    84 : 		}
    85 : 		return (int)msg.wParam;
    86 : 	}
本日のコメント(全2件) [コメントを投稿]

§ zinviex [まさにこれを待ってました!(T T)]

§ Suika [Google様が対応してくれそうな気がしますけどね~。 暇があったらきちんと常駐するように改良します。]


最近のコメント

364,000 at 2008.06.14
Copyright (c) Suika KNOnline.NET