我第一次來這裏發表。我可以使用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