SendKeys キーストロークの送信

SendKeysステートメントは他のウィンドウにキーストロークを送信する便利なモノです。しかしなんとなく素人くさい感じもあり最終手段として取られることが多いものです。Delphiにはそれに代わる機能がありません。しかし SendMessage APIWM_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;