キーストロークをシミュレートする |
キーストロークをシミュレート(押下げ・制御)する (130) | |
Option Explicit 'SampleNo=130 WindowsXP VB6.0(SP5) 2002.04.10 'キーストロークをシミュレートする(P1065) Private Declare Sub keybd_event Lib "user32.dll" _ (ByVal bVk As Byte, ByVal bScan As Byte, _ ByVal dwFlags As Long, ByVal dwExtraInfo As Long) '仮想キーコード・ASCII値・スキャンコード間でコードを変換する(P1067) Private Declare Function MapVirtualKey Lib "user32" _ Alias "MapVirtualKeyA" (ByVal wCode As Long, _ ByVal wMapType As Long) As Long Private Const VK_CAPITAL = &H14 Private Const VK_A = &H41 Private Const VK_KANJI = &H19 Private Const VK_RETURN = &HD Private Const VK_SHIFT = &H10 Private Const VK_HOME = &H24 Private Const VK_END = &H23 Private Const KEYEVENTF_EXTENDEDKEY = &H1 Private Const KEYEVENTF_KEYUP = &H2 Private Sub Command1_Click() 'CapsLock キーを押す 'CapsLock キーを押す Call keybd_event(VK_CAPITAL, 0, 0, 0) 'CapsLock キーを離す Call keybd_event(VK_CAPITAL, 0, KEYEVENTF_KEYUP, 0) End Sub Private Sub Command2_Click() 'A キーを押し、その後 Enter キーを押す Text1.Text = "" Text1.SetFocus Call keybd_event(VK_A, 0, 0, 0) Call keybd_event(VK_A, 0, KEYEVENTF_KEYUP, 0) Call keybd_event(VK_RETURN, 0, 0, 0) Call keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0) End Sub Private Sub Command3_Click() '漢字キーのON・OFF Text1.SetFocus Call keybd_event(VK_KANJI, 0, 0, 0) Call keybd_event(VK_KANJI, 0, KEYEVENTF_KEYUP, 0) End Sub Private Sub Command4_Click() '1行選択状態にする Text1.Text = "VBレスキュー(花ちゃん)" Text1.SetFocus Call keybd_event(VK_HOME, 0, 0&, 0&) Call keybd_event(VK_HOME, 0, KEYEVENTF_KEYUP, 0&) Call keybd_event(VK_SHIFT, 0, 0&, 0&) Call keybd_event(VK_END, 0, 0&, 0&) Call keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0&) Call keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0&) 'これでは、Windows2000 や XP では Shift キーが動作してくれません。 End Sub Private Sub Command5_Click() '1行選択状態にする Text1.Text = "VBレスキュー(花ちゃん)" Text1.SetFocus Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(VK_HOME, MapVirtualKey(VK_HOME, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), _ KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(VK_END, MapVirtualKey(VK_END, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), _ KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) 'こちらの設定ですと Windows95 以降 2000 や XP でもOKです。 End Sub 実行画面 |
|
キーコード定数はVBのキーコード定数を使用しても動作するようです。 漢字キーの(ON/OFF)設定もXPではText1.SetFocusがなくても動作します。 このように Windows2000以降では少し変わっているようです。ご使用に際しては十分確認 してからご使用願います。 尚、MicrosoftによるとWindows NT/2000ではこの関数の代わりにSendInput を使ってくださいと の事です。 但し、SendInput を使って同様の操作をした結果上記同様Shift キーが動作してくれません。 その場合、ASCII値・スキャンコード間でコードを変換して下さい。 |
2002/04/10