線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1407
推到 Plurk!
推到 Facebook!

如何取得外部exe執行後的回覆值

答題得分者是:P.D.
kevinsoung
一般會員


發表:36
回覆:41
積分:15
註冊:2011-11-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2022-02-18 12:10:15 IP:61.61.xxx.xxx 未訂閱
請教前輩
我如何用ShellExecute()指令執行Call.exe並取得該執行檔的回覆值
感激不盡

P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2022-03-17 21:01:43 IP:220.129.xxx.xxx 未訂閱
如果兩支程式都是由你寫的, 參考下面
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
系統時間:2024-04-30 12:57:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!