8.アクティブウィンドウにキーストロークを渡す |
1.アクティブウィンドウにキーストロークを渡す 2.このサンプルの使用上の留意点 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:SendInputV6.DLL(自作 DLL) 使用 API:SendInputV6.DLL 内で使用 その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :使用コントロール及び配置図は、下図を参照して下さい。
|
1.アクティブウィンドウにキーストロークを渡す(129) 2002.04.08 (1) 2013.05.14 |
Option Explicit Private Myhwnd As Long '対象ウィンドウのハンドル Private Sub Command1_Click() '別途メモ帳を起動し、何か記入しておいて下さい。 'アクティブウィンドウのハンドルを取得。 '引数は、各メッセージボックスを表示している時間を指定(指定しなければ、3秒間表示) Dim SI As New SendInputV6.Class1 Myhwnd = SI.fGetForGrdWindow(1500) '下記も参考に表示しているだけです。 Label1.Caption = " Handle : " & Myhwnd Label2.Caption = "Caption : " & SI.GetCaption() End Sub Private Sub Command2_Click() Dim SI As New SendInputV6.Class1 If Myhwnd <> 0 Then '指定のウィンドウをアクティブにする(最小化の場合は元のサイズで表示) Call SI.fSetForGrdWindow(Myhwnd) 'MsgWaitForMultipleObjects API を使っての安全な待機関数(ミリ秒単位で指定) Call SI.WaitTime(500) 'その間、0.5秒待つ(最小化になっている場合もあるので) '下記のように実行したいキー操作をマクロの記録のように書き込んで下さい。 Call SI.KeyReSet 'キー操作の初期化(使用した変数等の初期化) 'Ctr + A ですべて選択の動作 Call SI.KeyDown(vbKeyControl) 'Ctr キーの押し下げの動作を記録 Call SI.KeyDown(vbKeyA) 'A キーの押し下げの動作を記録(実際の操作は行われない) Call SI.KeyUp(vbKeyA) 'A キーの解放の動作を記録 Call SI.KeyUp(vbKeyControl) 'Ctr キーの解放の動作を記録 '選択した文字列をコピー(Ctr + C) Call SI.KeyDown(vbKeyControl) 'Ctr キーの押し下げの動作を記録 Call SI.KeyDown(vbKeyC) 'C キーの押し下げの動作を記録(実際の操作は行われない) Call SI.KeyUp(vbKeyC) 'C キーの解放の動作を記録 Call SI.KeyUp(vbKeyControl) 'Ctr キーの解放の動作を記録 'カーソルを末尾に移動(↓) Call SI.KeyDown(vbKeyDown) '↓ キーの押し下げの動作を記録 Call SI.KeyUp(vbKeyDown) '↓ キーの解放の動作を記録 'その位置に貼り付け(Ctr + V) Call SI.KeyDown(vbKeyControl) 'Ctr キーの押し下げの動作を記録 Call SI.KeyDown(vbKeyV) 'V キーの押し下げの動作を記録(実際の操作は行われない) Call SI.KeyUp(vbKeyV) 'V キーの解放の動作を記録 Call SI.KeyUp(vbKeyControl) 'Ctr キーの解放の動作を記録 Call SI.KeyStroke '上記一連のキー操作を一括で実行(ここで初めてキー操作を実行) End If End Sub |
2.このサンプルの使用上の留意点 |
以前は、keybd_event 関数を使った方法を紹介していたのですが、MSDN にこの関数は、SendInput 関数に取って代わられています。この関数の代わりに SendInputを使ってください。と書かれているので、SendInput関数を使った方法に変更しました。 SendInput関数は、結構扱いが難しい関数なので、必要な機能をまとめて、DLL 化しましたので、それをお使い下さい。 機能としては、下記のようなものがあります。 SendInputV6.dll の機能(個別の機能単位でも使用できますし、Excel VBA 上でも使用可) GetCaption アクティブウィンドウのタイトルを取得 fGetForGrdWindow() アクティブウィンドウのハンドルを取得 fSetForGrdWindow() 指定のウィンドウをトップ位置に移動しアクティブにする KeyDown() 指定キーのキーダウン操作 KeyReSet() 指定の一連のキー操作を初期化する KeyStroke() 指定の一連のキー操作を一括で実行 KeyUP() 指定キーのキーアップ操作 WaitTime() 指定時間待つ安全な待機関数 SendInputV6.dll は、VB6.0 の ActiveX DLL で作成しております。 不具合や要望等ありましたら、雑談用掲示板にでも書き込み下さい。 下記より、ダウンロードして、EXE と同じフォルダーにでも解凍し、参照設定してお使い下さい。 ダウンロード先 http://hanatyan.sakura.ne.jp/freesoft/SendInputV6.zip 詳しくは、サンプル投稿用掲示板の方に投稿しておりますので、必ず、そちらをご覧下さい。 又、SendInput関数の使用例はこちらに掲載しておりまし、キーコードの定数等は、こちらを参考にして下さい。 SendInput関数は、Win98 or WinNT4 SP3 以降でサポートされています。 Win2000 以降は、keybd_event 関数の代わりに SendInput を使ってくださいとの事です。(MSより) 又、SendInput 関数は、INPUT 構造体内のイベントを順にキーボード又は、マウス入力ストリームに挿入します。 これらのイベントに、ユーザーがキーボードまたはマウスで挿入したり、keybd_event、mouse_event に対する呼び出し又は、SendInput 関数を別に呼び出すことによって発生するイベントが割り込むことはありません。 Windows2000 で VK_SHIFT がうまく送れない現象にもスキャンコードを指定することで対応しています。 keybd_event と違って一度に処理するので使用方法が複雑ですがその分安全かと思います。 旧の掲示板の過去のログの4290番から4360番にかけて関連事項が投稿されていますのでそちらにも、一度目を通しておいて下さい。 |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
キーストロークをシミュレートする キーストローク、マウスの動き、ボタンのクリックなどを合成します。 SendInput でキーを送る キーを送信 キー入力 キーボード操作 キーコード keybd_event 関数 仮想キーコード・ASCII値・スキャンコード間でコードを変換する |