C/C++


他のウィンドウにメッセージを送信

他のウィンドウにウィンドウクラス名を指定することでメッセージ(任意のデータ)を送りましょう。 今回は例として、CUIでのメッセージ送信を扱います。では早速コードを示しましょう。

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040

// 2009 / 7 / 3 Shirao //メッセージ送信プログラム #include <windows.h> #include <iostream> #include <fstream> #include <string> using namespace std; void SendData(string s); int main(){ string s; //文字列を読んで、送る while(1){ if(s=="exit") break; getline(cin, s); SendData(s); } return 0; } //文字列をReceiveAppに送信する void SendData(string s) { COPYDATASTRUCT cd; HWND hWnd; char *buffer=new char[s.length()+1]; strcpy_s(buffer, s.length()+1, s.c_str()); //strcpy(buffer, s.c_str()); //今は非推奨 cd.dwData = 0; cd.cbData = (DWORD)(s.length()+1); cd.lpData = buffer; hWnd = FindWindow(L"ReceiveApp", NULL); //ReceiveAppのウィンドウハンドルを取得 SendMessage(hWnd, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cd); //ReceiveAppに送信 delete buffer; }

ポイント

メッセージの送信

この関数を定義して、SendMessageでメッセージを送信します。ここで、送信の対象はReciveApp というウィンドウです。送信するのは文字列sで、COPYDATASTRUCT構造体 に行32から34のように代入して送ることに注意してください。送る際にウィンドウハンドルが必要ですが、これは FindWindow関数で得られます。

022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040

//文字列をReceiveAppに送信する void SendData(string s) { COPYDATASTRUCT cd; HWND hWnd; char *buffer=new char[s.length()+1]; strcpy_s(buffer, s.length()+1, s.c_str()); //strcpy(buffer, s.c_str()); //今は非推奨 cd.dwData = 0; cd.cbData = (DWORD)(s.length()+1); cd.lpData = buffer; hWnd = FindWindow(L"ReceiveApp", NULL); //ReceiveAppのウィンドウハンドルを取得 SendMessage(hWnd, WM_COPYDATA, (WPARAM)NULL, (LPARAM)&cd); //ReceiveAppに送信 delete buffer; }

コンソールからの入力

ポイントでもなんでもない、基本ですが書いておきましょう。このように、string s にはgetline関数を使って簡単に標準入力cinから代入できます。

012 013 014 015 016 017 018

string s; //文字列を読んで、送る while(1){ if(s=="exit") break; getline(cin, s); SendData(s); }

付録

関連

メッセージの受信はこちらで扱っています。

ソース・実行ファイル

C++ソースファイルと実行ファイルを置いておきます。


プログラムに戻る