从C+发送消息+;到Delphi X 我试图从C++控制台应用程序向Windows 10上的Delphi X应用程序发送一条消息,但由于某种原因它无法工作。 下面是我的C++代码: 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代码:从C+发送消息+;到Delphi X 我试图从C++控制台应用程序向Windows 10上的Delphi X应用程序发送一条消息,但由于某种原因它无法工作。 下面是我的C++代码: 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; },c++,delphi,C++,Delphi,这是我的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;
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++应用程序说它找到了一个句柄:
窗口是3609366。。。正在发送消息。。。
按enter继续
当我按下MyButton(3609366)时,会显示相同的手柄,但消息框不会出现。
由于某些原因,Delphi应用程序未收到该消息
你知道为什么吗
P.S:它们运行在同一个用户帐户下。 < p>您正在向Delphi发送WMULUSER + 1消息,但没有在Delphi中听到该消息。在侧注上,Delphi代码期待“代码> ANSICHAR< < /Cord>数据,因此您不应该在C++代码中使用<代码> TCHAR < /代码>。此外,VCL在内部使用
WM_COPYDATA
,因此在解释lpData
之前,您必须先查看dwData
(对于dwData
值,您应该使用RegisterWindowMessage()
)。而且WM_COPYDATA
的WPARAM
必须是发送方的HWND
,而不是接收方。有用的信息-谢谢!编辑问题后,此答案不再适用。请注意。谢谢