ホーム | アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


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)("処理終了です!"));
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.