他のアプリのウィンドウハンドルを得る

一部、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.