2011年2月2日水曜日

VIsta 環境以降での SendKey 代替案

VB6 製な AP で Vista 環境以降に限定して起きる問題として、MS-IME の挙動がおかしくなるというのがあるんだよね。勤務先では IME 2007 をやめて ATOK を購入させることで対応させていたけど、根本的な問題は恐らく Sendkey Win32 API を利用しているからという気がする。

自分のPJではSendkeyを利用せずにKeybdEvent API を利用してEnterキーとかの制御をしているんだけど、こっちでは同様の問題は発生していないんだよね。定義はこんなの。

Private Declare Sub KeybdEvent Lib "user32" Alias "keybd_event"
(ByVal bVk As Byte, ByVal bScan As Byte,
ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

利用するときはこんな感じ

Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_TAB = &H9 '[TAB]
Private Const VK_SHIFT = &H10 '[Shift]

Call KeybdEvent(VK_TAB, 0, 0, 0)
Call KeybdEvent(VK_TAB, 0, KEYEVENTF_KEYUP, 0)

こんな感じで使ってあげればTABを押して離したというのをSendkeyと同じように実現してくれる。で、使っている感想としてはSendkeyであった動作不具合がこっちだと再現できないので、結構Vista Windows 7 とかでも対応としてやっていいような気がする。

0 件のコメント:

コメントを投稿