|
|
||||
Tips > |
|||||
FindWindowEx でメモ帳に文字列を転送 |
更新 : 2010/06/12 |
||||
|
|
||
解説: アプリケーションで何かを処理させ、その結果を他のアプリケーションに表示させたい時があります。どのようにすれば可能でしょう? GetDesktopWindow, FindWindowEx, SendMessage などの関数を組み合わせると、文字列を任意のアプリケーションに転送することができます。 ちょっと寄り道: GetDesktopWindow 関数は、Windows のデスクトップウィンドウのハンドルを返します。 FindWindowEx 関数は、指定された文字列と一致するクラス名やウィンドウ名のウィンドウハンドルを返します。 HWND FindWindowEx( HWND hwndParent, // 親ウィンドウのハンドル HWND hwndChildAfter, // 子ウィンドウのハンドル LPCTSTR lpszClass, // クラス名 LPCTSTR lpszWindow // ウィンドウ名 ); 親ウィンドウと子ウィンドウのハンドルに NULL を、クラス名に文字列を、ウィンドウ名に NULL を指定してください。すべてのトップレベルウィンドウから検索して、あらゆるウィンドウ名の中から、該当ウィンドウのハンドルを見つけてくれます。 SendMessage 関数は、 指定されたウィンドウに、メッセージを送ります。 使用例: 以下は、デスクトップウィンドウから起動済みメモ帳を探して、任意文字列を転送しています。 準備としては、Button を配置するだけです。 Button1をクリックするとデスクトップウィンドウからメモ帳を探してくれます。 メモ帳が存在しなければ、その旨のメッセージを返します。 メモ帳が起動していればエディットコントロールに文字列を転送します。 //------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // GetDesktopWindow 関数でデスクトップウィンドウのハンドルを取得 HWND hwnd = GetDesktopWindow(); // メモ帳を探す hwnd = FindWindowEx(hwnd, 0, "Notepad", 0); // メモ帳がない場合、メッセージを表示 if (hwnd == 0) { ShowMessage("メモ帳が見つかりません。"); return; } // メモ帳の Edit ハンドルを取得 hwnd = FindWindowEx(hwnd, 0, "Edit", 0); // メモ帳に文字列を送る SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)("処理終了です!")); } //------------------------------------------------------------------- |