他のウィンドウにウィンドウクラス名を指定することでメッセージ(任意のデータ)を送りましょう。
今回は例として、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++ソースファイルと実行ファイルを置いておきます。