DelphiのVCLアプリケーションでWindows APIの「keybd_event」を使うと、
キーボード操作を送ることができます。
たとえば、
keybd_event(VK_TAB, 0, 0, 0); // Tabキーダウン
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0); // Tabキーアップ
と記述すると、処理の途中でTabキーを押下させることができます。
(押しっぱなしになるのを防ぐため、キーアップも記述しています。)
同様に、マウスの操作についても
Windows APIの「mouse_event」や「GetCursorPos」「SetCursorPos」を使うと、
マウスをプログラム上から操作することが可能です。
以下にマウス操作ロジックの例を示します。
// スクリーンの左から100px、上から400pxの位置にカーソルセット
SetCursorPos(100, 400);
// 現在のマウス座標から右に100px、下に400pxの位置にカーソル移動
// (※var宣言で変数 pt: TPoint; を宣言)
GetCursorPos(pt); // マウスの現在地取得
SetCursorPos(pt.X + 100, pt.Y + 400); // カーソル移動
// 左クリック
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // 左マウスダウン
mouse_event(MOUSEEVENTF_LEFTUP , 0, 0, 0, 0); // 左マウスアップ
// 右クリック
mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); // 右マウスダウン
mouse_event(MOUSEEVENTF_RIGHTUP , 0, 0, 0, 0); // 右マウスアップ
これらを組み合わせると、たとえば
「左マウスダウン→カーソル移動→左マウスアップ」
という操作で、ロジックだけで疑似的にドラッグ&ドロップを行わせるといった応用も可能です。
(Tipsメルマガ 2021年3月号より)