我第一次来这里发表。我可以使用wm_copydata来模拟应用程序退出代码吗?
我已经用borland C++构建了一个小应用程序,它通过商业第三方应用程序的shell命令执行。这第二个应用程序然后等待直到它从我的应用程序接收退出代码。我想要做的是发送'0'或'1'到第二个应用程序,通过发送消息wm_copydata来模仿退出代码。我这样做是因为我希望我的应用程序无需退出即可发送退出代码!这可能吗?
问题是数据永远不会到达,也不会被第二个接收应用程序处理。我实际上不确定是否第二个应用程序实现代码来处理wm_copydata消息,我只是假设它...
感谢您的帮助,因为我试图建立一个应用程序,将不同供应商的不同软件我们的部门。这里是我正在使用的代码:
void SendMyMessage(char* command)
{
HWND Hamilton_Window_Handle;
int len;
char title[254];
AnsiString stemp;
AnsiString hname = "HAMILTON RUN CONTROL";
Hamilton_Window_Handle = FindWindow(0,0);
while (Hamilton_Window_Handle != 0)
{
len = GetWindowText(Hamilton_Window_Handle, title, 255);
stemp = UpperCase(title);
if (AnsiPos(hname, stemp) > 0)
{break;}
Hamilton_Window_Handle = GetWindow(Hamilton_Window_Handle, GW_HWNDNEXT);
}
COPYDATASTRUCT cds;
cds.dwData = 0;
cds.cbData = strlen(command) +1;
cds.lpData = command;
SendMessage(Hamilton_Window_Handle, WM_COPYDATA, 0, (LPARAM)&cds);
if(AnsiString(command) == "1")
{
Form1->Label1->Caption="Barcodes passed consistency check!";
Form1->Label1->Font->Color = clGreen;
}
else
{
Form1->Label1->Caption="Barcodes failed consistency check!";
Form1->Label1->Font->Color = clRed;
}
}
感谢阿德里亚诺和雷米的答案。 对于我们的实现,我们需要将数据发送回第二个(商业应用程序),以便我的应用程序保持打开状态,等待用户反馈,同时第二个应用程序在接收数据后继续执行。等待外部应用程序退出是因为我们的工作设置是一个限制。我通过将数据保存到文件并使商业应用程序读取文件内容以进行进一步处理,同时保持我的应用程序保持打开状态,从而解决了问题。 干杯, – Code850
与其他进程间通信机制相比,使用文件交换数据要慢得多,并且更多地暴露给外部各方。 'WM_COPYDATA'可以工作得很好,或者你可以使用任何其他机制,比如管道,套接字,邮筒,ActiveX/COM,RPC等等。 –
感谢您提及替代品,因为除了管道之外,我并不知道它们。你是对的,保存和读取外部文件很慢,但它现在正在工作...... – Code850