4.SendInput 関数のDLL化による簡単キーボード操作 |
1.SendInput 関数のDLL化による簡単キーボード操作 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:SendInputV6 プロジェクト→参照設定→参照ボタン→ SendInputV6.dll を参照して下さい。 使用 API:SendInput 他11個ほどDLL内で使っております。 その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。 :
|
1.SendInput 関数のDLL化による簡単キーボード操作 |
Win2000 以降は、keybd_event 関数の代わりに SendInput を使ってくださいとの Microsoft からのアナウンス等もあり、SendInput
関数を使ったキー操作例をと思ったのですが、SendInput 関数は、結構操作も複雑で面倒なのと、どうせ実使用する場合もSendInput 関数だけの操作では済まないので、API
に不慣れな人にでも簡単に使用できるようにと思い必要な機能を DLL にまとめたものを作ってみました。以下はそのDLLの使用例です。 SendInputV6 の機能としては、下記のようなものがあります。 SendInputV6.dll の機能(個別の機能単位でも使用できますし、Excel VBA 上でも使用可) GetCaption アクティブウィンドウのタイトルを取得 fGetForGrdWindow() アクティブウィンドウのハンドルを取得 fSetForGrdWindow() 指定のウィンドウをトップ位置に移動しアクティブにする KeyDown() 指定キーのキーダウン操作 KeyReSet() 指定の一連のキー操作を初期化する KeyStroke() 指定の一連のキー操作を一括で実行 KeyUP() 指定キーのキーアップ操作 WaitTime() 指定時間待つ安全な待機関数 SendInputV6 は下記より、ダウンロードして、EXE と同じフォルダーにでも解凍し、参照設定してお使い下さい。 ダウンロード先 http://hanatyan.sakura.ne.jp/freesoft/SendInputV6.zip プロジェクト→参照設定→参照ボタン→ SendInputV6.dll を参照して下さい。 レジストリに登録/削除するには、ファイル名を指定して実行から下記をコードを実行 登録 regsvr32 SendInputV6.dllが保存されているフルパス\SendInputV6.dll 削除 regsvr32 /u SendInputV6.dllが保存されているフルパス\SendInputV6.dll Dim SI As New SendInputV6.Class1 のように宣言すれば、後は、下記のようにして使用できます。 Call SI.WaitTime(500) '--------------------------------------------------------------------------------------------------- Option Explicit Private Myhwnd As Long '対象ウィンドウのハンドル Private Sub Command1_Click() '別途、ハンドルを取得しているならこの部分は必要ありません。 'アクティブウィンドウのハンドルを取得。 '引数は、各メッセージボックスを表示している時間を指定(指定しなければ、3秒間表示) Dim SI As New SendInputV6.Class1 Myhwnd = SI.fGetForGrdWindow(1500) '下記も参考に表示しているだけです。 Label1.Caption = " Handle : " & hWnd Label2.Caption = "Caption : " & SI.GetCaption() End Sub Private Sub Command2_Click() Dim myText As String 'テスト用のデータを作成 myText = "このDLLは、他のアプリにキーストロークをシミュレートする為の" _ & vbCrLf & "機能を纏めたDLLです。" 'データをクリップボードに貼り付けます。 Clipboard.Clear Clipboard.SetText myText 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 'キー操作の初期化(使用した変数等の初期化) Call SI.KeyDown(vbKeyA) 'Aキーの押し下げの動作を記録(実際の操作は行われない) Call SI.KeyUp(vbKeyA) 'Aキーの解放の動作を記録 Call SI.KeyDown(vbKeyB) '同様に夫々のキー操作を記録 Call SI.KeyUp(vbKeyB) Call SI.KeyDown(vbKeyReturn) '改行 Call SI.KeyUp(vbKeyReturn) Call SI.KeyDown(vbKeyControl) '続けてクリップボードのテキストをペーストします。 Call SI.KeyDown(vbKeyV) Call SI.KeyUp(vbKeyV) Call SI.KeyUp(vbKeyControl) Call SI.KeyDown(vbKeyReturn) '改行 Call SI.KeyUp(vbKeyReturn) Call SI.KeyStroke '上記一連のキー操作を一括で実行(ここで初めてキー操作を実行) End If End Sub Private Sub Command3_Click() 'クラス名又はキャプションタイトルを与えてウィンドウのハンドルを取得 Dim SI As New SendInputV6.Class1 Dim title As String Dim ClsName As String 'クラス名又はキャプションタイトルのどちらか一つでもOK ClsName = "Notepad" 'クラス名 title = "無題 - メモ帳" 'キャプションタイトル Myhwnd = SI.fGetFindWindowEx(0&, 0&, ClsName, title) '下記は、参考に表示しているだけです。 Label1.Caption = " Handle : " & Myhwnd Label2.Caption = "Caption : " & SI.GetCaption() End Sub 実行結果等の図及び配置図 SendInput 関数自体の使用例は下記で紹介しております。(上記が理解でき使用できるようなら試して見て下さい。) キーストロークをシミュレートする(SendInput関数使用例) |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
SendInput 関数 キーストローク、マウスの動き、ボタンのクリックなどを合成します プログラム上からキーボードを操作する プログラムでキーを押す 他のアプリのショートカットを操作する 他のアプリケーションのショートカットキーをプログラムから操作する |