C++コンソールアプリケーションからWindows 10のDelphi Xアプリケーションにメッセージを送信しようとしましたが、何らかの理由で機能しません。以下 は私のC++コードです:C++からDelphi Xへのメッセージの送信
int _tmain(int argc, _TCHAR* argv[])
{
CString dataToSend = _T("MY DATA");
COPYDATASTRUCT cds;
cds.dwData = 1; // can be anything
cds.cbData = sizeof(TCHAR) * (_tcslen(dataToSend) + 1);
cds.lpData = (void*)dataToSend.GetBuffer(cds.cbData);
HWND hwndFound; // This is what is returned to the caller.
hwndFound = FindWindow(_T("TMyForm"), 0);
if (hwndFound)
{
printf("WINDOW IS FOUND %i... Sending a message...\n", hwndFound);
SendMessage(hwndFound, WM_COPYDATA, (WPARAM)hwndFound, (LPARAM)(LPVOID)&cds);
}
else
{
printf("WINDOW IS NOT FOUND!\n");
}
char* end = "";
printf("Press enter to continue...");
scanf(end);
return 0;
}
これは私のDelphiコードです:
private
procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA;
....
procedure TMyForm.WMCopyData(var Msg: TWMCopyData);
var
s : AnsiString;
begin
s := PAnsiChar(Msg.CopyDataStruct.lpData) ;
ShowMessage(s);
end;
....
procedure TMyForm.MyButtonClick(Sender: TObject);
begin
// Checking my handle
ShowMessage(IntToStr(Handle));
end
C++アプリは、それがハンドルを見つけたと言う:
WINDOWはメッセージの送信... 3609366発見されました。 .. Enterキーを押して続行...
MyButton(3609366)を押したときに同じハンドルが表示されますが、メッセージボックスは表示されません。 何らかの理由でDelphiアプリがメッセージを受信していません。
理由はありますか?
P .:これらは同じユーザーアカウントで実行されます。
サイドノートでは、Delphiコードは 'AnsiChar'データを期待しているので、C++コードでは' TCHAR'を使用すべきではありません。また、VCLは 'WM_COPYDATA'を内部的に使用しているので、' lpData'を解釈する前に 'dwData'を参照する必要があります(' dwData'の値に 'RegisterWindowMessage()'を使うべきです)。そして、 'WM_COPYDATA'の' WPARAM'は、受信者ではなく送信者の 'HWND'である必要があります。 –
便利な情報 - ありがとう! –