他のアプリのウィンドウハンドルを得る
※一部、Professional版以上が対象となります。
他のアプリのウィンドウハンドルを得る一番簡単な方法は FindWindow APIを使用することです。しかしこの関数は、取得したいウィンドウのタイトルが解らないといけません。タイトル、例えばメモ帳なら「無題 - メモ帳」がタイトルです。無題の部分は固定では無いので取得は難しくなります。(メモ帳のタイトルは無題〜とは限らない。)
そこでクラス名で取得する方法を紹介します。こっちで検索すればある程度確実です。クラス名は変わることはありません。例えばメモ帳ならクラス名は「Notepad」です。
さて、このクラス名をどうやって調べるかといいますと、Professional 版以上についてくるツール「WinSight」を使うことによって調べられます。こいつを起動するとワジャワジャとツリーが表示されます。目印はひし形の中が+になっているノードです。ここにクラス名が表示されます。例えば「電卓」を起動すれば
+Overlapped 00000804{SciCalc} CALC.EXE (470,336)-(746,596) "電卓"
ってのが見つかると思います。(数値は違います)ここで{ }で括られた個所がクラス名です。
以下の例はメモ帳のハンドルをゲットし、メモ帳を手前に持ってきてさらにクリップボードの内容を貼り付けます。WinSightが無い場合は拙作の
HandleX を使ってください。
| ■ 他のアプリのハンドルを取得する例 |
var
WinHnd : HWND; //ウィンドウのハンドル
EdtHnd : HWND; //子ウィンドウのハンドル
begin
//貼り付ける文字列をコピー (ClipBrdユニット)
ClipBoard.SetTextBuf('Delphi3');
//メモ帳を探す
WinHnd := FindWindow('NotePad', nil);
//メモ帳をアクティブに
SetForegroundWindow(WinHnd);
//メモ帳のエディット部分をゲット
EdtHnd := FindWindowEx(WinHnd, 0, 'Edit', nil);
//貼り付け!
SendMessage(EdtHnd,WM_PASTE,0,0);
end.
|