他のアプリのウィンドウハンドルを得る
※一部、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. |