HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0627
まーるIMEがON中のキー判定2解決


まーる

リンク

2014/6/27(Fri) 22:14:29|NO.62640

こんばんは。
IMEがON中の操作で押したキー判定をしたいのですが
onkey内部ではほとんど VK_PROCESSKEY しか取得できないようで、
ImmGetVirtualKey を使ってみたのですが、うまくいきません。

以下のコードは、あくまでも簡単なイメージで
たとえば半角/全角キーが押されたかどうか、
変換候補を選択した場合のSpaceキーまたは上下キー、
変換決定時のEnterキー、
IMEはONだが変換候補を表示していない時のSpaceキー(全角空白キー)
等が押されたかどうかを判定したいと思っています。

HSPでIMEがON中の元キーを取得するには、他にどんな方法があって
どこまで判定できるのでしょうか?



#const VK_PROCESSKEY $000000E5 #const VK_ESCAPE $0000001B #const VK_OEM_AUTO $000000F3 #const VK_OEM_ENLW $000000F4 #const VK_DOWN $00000028 #const VK_UP $00000026 #const VK_SPACE $00000020 #const VK_RETURN $0000000D #uselib "imm32.dll" #cfunc ImmGetVirtualKey "ImmGetVirtualKey" int onkey gosub *OnIme stop *OnIme switch (wparam) case VK_PROCESSKEY mes "IME is ON.." vk_key = ImmGetVirtualKey(hwnd) switch (vk_key) case VK_OEM_AUTO case VK_OEM_ENLW mes "IME ON, VK_OEM" swbreak case VK_ESCAPE mes "IME ON, VK_ESCAPE" swbreak case VK_DOWN mes "IME ON, VK_DOWN" swbreak case VK_UP mes "IME ON, VK_UP" swbreak case VK_SPACE mes "IME ON, VK_SPACE" swbreak case VK_RETURN mes "IME ON, VK_RETURN" swbreak swend swend return



この記事に返信する


暇人

リンク

2014/6/28(Sat) 00:18:49|NO.62641

これでやりたいことが出来るのか分からないが
一応押されたキーを取得できる

#const VK_PROCESSKEY $000000E5 #const VK_ESCAPE $0000001B #const VK_OEM_AUTO $000000F3 #const VK_OEM_ENLW $000000F4 #const VK_DOWN $00000028 #const VK_UP $00000026 #const VK_SPACE $00000020 #const VK_RETURN $0000000D #uselib "imm32.dll" #cfunc ImmGetVirtualKey "ImmGetVirtualKey" int #cfunc ImmGetOpenStatus "ImmGetOpenStatus" int #cfunc ImeContext "ImmGetContext" sptr #uselib "User32.dll" #cfunc MapVirtualKey "MapVirtualKeyA" int,int himc=ImeContext(hwnd) onkey gosub *OnIme stop *OnIme if ImmGetOpenStatus(himc) { vk_key = MapVirtualKey(((lparam>>16)&$ff),1) mes "IME is ON.." switch (vk_key) case VK_OEM_AUTO case VK_OEM_ENLW mes "IME ON, VK_OEM" swbreak case VK_ESCAPE mes "IME ON, VK_ESCAPE" swbreak case VK_DOWN mes "IME ON, VK_DOWN" swbreak case VK_UP mes "IME ON, VK_UP" swbreak case VK_SPACE mes "IME ON, VK_SPACE" swbreak case VK_RETURN mes "IME ON, VK_RETURN" swbreak swend } return



まーる

リンク

2014/6/29(Sun) 16:14:55|NO.62683

MapVirtualKey()+αで求めていた機能が実現でき、バッチリ組み込めました。
サンプルコードに近いシンプルな形で解答を得られるとは思っていませんでした。
大変参考になりました、感謝です!



ONION software Copyright 1997-2023(c) All rights reserved.