SendKeys キーストロークの送信
SendKeysステートメントは他のウィンドウにキーストロークを送信する便利なモノです。しかしなんとなく素人くさい感じもあり最終手段として取られることが多いものです。Delphiにはそれに代わる機能がありません。しかし SendMessage API で WM_KEYDOWNメッセージを送りつければ同じような結果を得ることができます。難しいのは送り付けるウィンドウ(コントロール)を判断することでしょう。例えばメモ帳に[Ctrl]+[V]を送りたくてもメモ帳そのものに送っても処理されません。メモ帳のエディットボックス部分に送らなければならないからです。また、メッセージにはいろいろな種類があり、貼り付けなら WM_PASTE、閉じるなら WM_CLOSEなどがあります。
■ SendMessage の使用例 |
procedure TForm1.Button1Click(Sender: TObject); var WinHnd : Integer; EdtHnd : Integer; begin WinHnd := FindWindow(nil, 'アプリ名'); EdtHnd := GetWindow(WinHnd, GW_CHILD); SendMessage(EdtHnd, WM_KEYDOWN, 17, 0); SendMessage(EdtHnd, WM_KEYDOWN, 86, 0); SendMessage(EdtHnd, WM_KEYUP, 86, 0); SendMessage(EdtHnd, WM_KEYUP, 17, 0); end; |