WM_COPYDATA を使用して、あるウィンドウから別のウィンドウに文字列を送信しようとしました。メッセージは受信ウィンドウで完全に受信されます。私が送信する文字列を除いて、そのままではありません。
送信アプリケーションのコードは次のとおりです。
HWND wndsend = 0;
wndsend = FindWindowA(0, "Receiving window");
if(wndsend == 0)
{
printf("Couldn't find window.");
}
TCHAR* lpszString = (TCHAR*)"De string is ontvangen";
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(lpszString);
cds.lpData = (TCHAR*)lpszString;
SendMessage(wndsend, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);
そして、これは受信側アプリケーションのコードです:
case WM_COPYDATA :
COPYDATASTRUCT* pcds;
pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == 1)
{
TCHAR *lpszString;
lpszString = (TCHAR *) (pcds->lpData);
MessageBox(0, lpszString, TEXT("clicked"), MB_OK | MB_ICONINFORMATION);
}
return 0;
これで、呼び出されたメッセージボックスが漢字を出力するようになりました。
私の推測では、正しく変換しなかったか、実際には文字列を送信せず、文字列へのポインターのみを送信したため、受信者のウィンドウにまったく異なるデータが表示された可能性があります。私はそれを修正する方法がわかりません。