2012年9月18日火曜日

[C++/CLI] 別のプロセスにメッセージを送信する


[共通] 当 Blog の投稿に関する基本事項について
→ http://fuunyan.blogspot.jp/2012/09/blog.html


例によって経過などはリストボックスに追加する方向で

・投げるほう
FindWindow で対象画面を見つけて SendMessage でメッセージを送信。
// stdafx.h に追加したやつら
#include <windows.h>
#pragma comment(lib, "user32.lib")

// 対象ウィンドウの検索
HWND  hWND;
hWND = FindWindow(nullptr, L"送信先画面名");
if(hWND == nullptr)
{
    LBox->Items->Add("not find...");
    return;
}
else
    LBox->Items->Add("find...");

// メッセージ送信
COPYDATASTRUCT cds;

cds.dwData = 0;
cds.cbData = sizeof("送信文字列 ") + 1;
cds.lpData = L"送信文字列";
::SendMessage(hWND, WM_COPYDATA, 0, (LPARAM)&cds);

・受けるほう
WndProc をオーバーライドして独自処理を作成。
その中で送信メッセージを処理する。
// stdafx.h に追加したやつら
#include <windows.h>

// protectedに追加(デストラクタの後ろとか?)
protected:
virtual void WndProc(Message% m) override
{
    switch(m.Msg)
    {
        case WM_COPYDATA:
            // 処理記述
            COPYDATASTRUCT *cds = (COPYDATASTRUCT*)m.LParam.ToInt32();
            String^ str = gcnew String( (wchar_t*)cds->lpData);
            listBox1->Items->Insert(0, str);
            break;
    }
    Form::WndProc(m);
}

0 件のコメント:

コメントを投稿