4.アプリ上でのキー操作用に特化した自作 DLL の使用例(12_Key_04) (旧、SampleNo.453) |
1.アプリ上でのキー操作用に特化した[自作 SendKeys2013.dll ]の使用例 2. 3. 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86 Option :[Compare Text] [Explicit On] [Infer On] [Strict On] Imports :なし 参照設定:プロジェクト→参照の追加→参照タブ→ \このexeの起動フォルダー\SendKeys2013.dll を参照追加して下さい。 その他 :SendKeys2013.dll は、VB2005 以降で使用できるように、Framework 2.0 / ターゲットCPU:x86 でコンパイル :しておりますが、不具合や要望等ありましたら、雑談用掲示板にでも書き込み下さい。 :下記より、ダウンロードして、EXE と同じフォルダーにでも解凍し、参照設定してお使い下さい。 :ダウンロード先 http://hanatyan.sakura.ne.jp/freesoft/SendInput2.zip このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので) 必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい) |
1.アプリ上でのキー操作用に特化した[自作 SendKeys2013.dll ]の使用例 |
SendInput 関数の主な使用目的は、他のアプリにキーストロークを送る事なのだから、SendInput 関数用のDLLを作るなら、他のアプリにキーストロークを送るのに必要な機能を一纏めにしたらかなり便利になり誰にでも簡単に使用する事ができるのではないかと思い作ってみました。 機能としては、下記のようなものがあります。 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 SendKeys2013.dll の機能 GetCaption アクティブウィンドウのタイトルを取得 fGetForGrdWindow() アクティブウィンドウのハンドルを取得 fSetForGrdWindow() 指定のウィンドウをトップ位置に移動しアクティブにする KeyDown() 指定キーのキーダウン操作 KeyReSet() 指定の一連のキー操作を初期化する KeyStroke() 指定の一連のキー操作を一括で実行 KeyUP() 指定キーのキーアップ操作 WaitTime() 指定時間待つ安全な待機関数 上記の使用方法の解説等は、ドキュメントコメント(パラメーターの説明文)で表示されます。 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0 Public Class Form1 #Region "アクティブウィンドウのハンドルを取得部分" Private hwnd As IntPtr Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '別途、ハンドルを取得しているならこの部分は必要ありません。 'エラーが表示されたらSendInput2013.dllへの参照設定を確認して下さい。 Dim si As New SendKeys2013.Class1 'アクティブウィンドウのハンドルを取得。 '引数は、各メッセージボックスを表示している時間を指定(指定しなければ、3秒間表示) hwnd = si.fGetForGrdWindow(2000) '下記も参考に表示しているだけです。 Label2.Text = "Handle:" & hwnd.ToString() Label3.Text = "Caption:" & si.GetCaption() End Sub #End Region #Region "SendKeys2013.dll によるキーボード操作例" Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim myText As String = "" myText = "このDLLは、他のアプリにキーストロークをシミュレートする為の" & vbCrLf & _ "機能を纏めたDLLです。" 'データをシステムクリップボードに貼り付けます(テスト用のデータを作成) System.Windows.Forms.Clipboard.SetDataObject(myText, True) 'エラーが表示されたらSendInput2013.dllへの参照設定を確認して下さい。 Dim si As New SendKeys2013.Class1 If hwnd <> IntPtr.Zero Then '指定のウィンドウをアクティブにする(最小化の場合は元のサイズで表示) 'SetForegroundWindow ではアクティブにならない場合の対策済み si.fSetForGrdWindow(hwnd) 'MsgWaitForMultipleObjects API を使っての安全な待機関数(ミリ秒単位で指定) 'Thread.Sleep メソッド のようなスレッドを停止するような事をしていないので安全かと。 si.WaitTime(500) 'その間、0.5秒待つ(最小化になっている場合もあるので) '下記のように実行したいキー操作をマクロの記録のように書き込んで下さい。 'SendInput API を使ってのキー操作に付き割り込みが入らず安全です。 'http://hanatyan.sakura.ne.jp/patio/read.cgi?mode=view2&f=245&no=0 si.KeyReSet() 'キー操作の初期化(使用した変数等の初期化) si.KeyDown(Keys.A) 'Aキーの押し下げの動作を記録(実際の操作は行われない) si.KeyUP(Keys.A) 'Aキーの解放の動作を記録 si.KeyDown(Keys.B) '同様に夫々のキー操作を記録 si.KeyUP(Keys.B) si.KeyDown(Keys.Enter) '改行 si.KeyUP(Keys.Enter) si.KeyDown(Keys.ControlKey) '続けてクリップボードのテキストをペーストします。 si.KeyDown(Keys.V) si.KeyUP(Keys.V) si.KeyUP(Keys.ControlKey) si.KeyStroke() '上記一連のキー操作を一括で実行(ここで初めてキー操作を実行) MessageBox.Show("続けて記入した内容を削除します。", "削除確認", MessageBoxButtons.OK, _ MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, _ MessageBoxOptions.DefaultDesktopOnly) si.KeyReSet() si.fSetForGrdWindow(hwnd) '指定のウィンドウをアクティブにする si.WaitTime(500) 'その間、0.5秒待つ si.KeyReSet() 'キー操作の初期化 si.KeyDown(Keys.ControlKey) 'すべて選択 si.KeyDown(Keys.A) si.KeyUP(Keys.A) si.KeyUP(Keys.ControlKey) '削除する si.KeyDown(Keys.Delete) si.KeyUP(Keys.Delete) si.KeyStroke() '上記一連のキー操作を実行 End If End Sub #End Region End Class 図1.上記実行結果及び使用コントロール類の配置図 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
キーストローク ,キーボード,キー入力,キーコード,他のアプリ,SendKeys SendInput 関数 キーボード操作 |