如何取得外部exe執行後的回覆值 |
答題得分者是:P.D.
|
kevinsoung
一般會員 ![]() ![]() 發表:36 回覆:41 積分:15 註冊:2011-11-09 發送簡訊給我 |
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
如果兩支程式都是由你寫的, 參考下面
A.exe call B.exe Program A ,,, private procedure SendCopyData(hTargetWnd: HWND; ACopyDataStruct:TCopyDataStruct); // 發送訊息 ... implementation procedure TFormA.SendCopyData(hTargetWnd: HWND; ACopyDataStruct: TCopyDataStruct); begin if hTargetWnd <> 0 then SendMessage(hTargetWnd, WM_COPYDATA, Longint(Handle), Longint(@ACopyDataStruct)) end; // 點擊按鍵鍵啟動B.exe 並送參數過去 procedure TFormA.Button1Click(Sender: TObject); var DLLfile : pChar; DLLparm : string; mCopyDataStruct: TCopyDataStruct; hTargetWnd: HWND; begin DLLfile := pChar('B.EXE'); DLLparm := '要傳給B的參數' with mCopyDataStruct do begin dwData := 0; // may use a value do identify content of message, 識別字元 cbData := StrLen(pChar(DLLparm)) 1; //Need to transfer terminating #0 as well lpData := pChar(DLLparm); end; ShellExecute(handle,nil,DLLfile,pChar(DLLparm),nil,SW_NORMAL); hTargetWnd := FindWindow('TFormB',nil); SendCopyData(hTargetWnd, mCopyDataStruct); end; program B private private procedure SendCopyData(hTargetWnd: HWND; ACopyDataStruct:TCopyDataStruct); // 接收訊息 ... implementation // 接收程式必須在 Form Active 才會有作用, 所以當 A 傳給 B, 如果要B有作用, 必須讓B在作用視窗上 procedure TFormB.WMCopyData(var Msg: TWMCopyData); var sText: array[0..256] of Char; // 依所要接收的長度決定Char length begin case Msg.CopyDataStruct.dwData of { Receive Text, Text empfangen} // 此處的 0 就是 Program A 中的 dwData 0:begin StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); ... 自行撰寫解開 sText 的訊息 end; end; end; 由於本站的設計, 編排都會跑掉, 所以看到畫面可能都擠在一起, 自己再分一下 以上月加入 uses ShellApi |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |