我正在用 C++ 编写一个应用程序,它将向用 Delphi 编写的应用程序发送一条消息。
这是我的接收器应用程序:
单击按钮时,Edit1.Text
将ShellExecute()
作为命令行参数发送到发送方应用程序 (C++)。
发送方应用程序会将参数作为WM_COPYDATA
消息发送回接收方应用程序,接收方应用程序将在Edit2
文本框中显示该参数。
这是 Delphi 应用程序的代码(Delphi 10.3 Rio):
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, 'open', 'deneme.exe', PWideChar(Edit1.Text), nil, SW_HIDE);
end;
procedure TForm1.MesajAl(var Mesaj: TMessage);
var
Veri: PCopyDataStruct;
begin
Veri := Pointer(Mesaj.LParam);
Edit2.Text := PChar(Veri^.lpData);
end;
这是我的 C++ 应用程序的代码(Code::Blocks IDE):
#include <iostream>
#include <windows.h>
#include <tchar.h>
using namespace std;
int main(int argc, char* argv[])
{
if (argc < 2)
{
return 0;
}
else
{
HWND hwnd = FindWindow(NULL, "Form1");
string alinanMesaj;
LPCTSTR gonderilecekMesaj = alinanMesaj.c_str();
COPYDATASTRUCT cds;
cds.cbData = sizeof(TCHAR)*(_tcslen(gonderilecekMesaj) + 1);
cds.dwData = 1;
cds.lpData = (PVOID)gonderilecekMesaj;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);
return 0;
}
}
问题是Edit2
文本框什么也没显示。
顺便说一句,我在这个网站上对WM_COPYDATA
. 但是,尽管存在这种情况,但我自己无法解决我的问题。
那么,我应该怎么做才能解决我的问题?