全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1192
推到 Plurk!
推到 Facebook!

ShellExecute 與 FindWindow組合使用

尚未結案
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-06 10:06:53 IP:219.68.xxx.xxx 未訂閱
我利用ShellExecute 執行一些外部程式 (xx.bat) 並在ShellExecute 指令後 立即使用 FindWindow 取得其 HWND 以便SetWindowPos 可以使用 發現一個奇怪現象 當外部程式數目很少時 可以順利動作 但是當外部程式數目較多時 部分(通常是較後面執行者)無法順利抓到HWND (為0) 但是又不是每次都會這樣, 這現象令我狐疑 結果我利用加入sleep()在ShellExecute之後, FindWindow 之前 試驗結果發現 當程式數目較少, 短的sleep時間時間即可正常運作, 當成是數目增多, 相對也需要增加sleep時間才能正常運作 (大約是8-10個 *.bat sleep(1500)) 不知道我是哪邊應注意而未注意呢? var psei:^TShellExecuteInfo; hwnd:THandle; windowCaption:String; for i=0 to scriptList.Count-1 do begin New(psei); with psei^ do begin FillChar(psei^, SizeOf(psei^), 0); cbSize:=Sizeof(psei^); fMask:=SEE_MASK_NOCLOSEPROCESS ; // 用來取得 ProcessID wnd:=0; lpVerb:=nil; lpFile:=PChar(scriptList[i]); lpParameters:=nil; lpDirectory:=nil; nShow:=SW_SHOWDEFAULT; end ; ShellExecuteEx(@psei^); sleep(1500); //少了這行, 通常會遺漏幾個視窗抓不到hwnd hwnd:=FindWindow(nil, PChar(windowCaption)); SetWindowPos(hwnd,0,10,10,200,200,SWP_SHOWWINDOW) end;
kkccgg
初階會員


發表:50
回覆:54
積分:30
註冊:2002-07-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-06 10:34:08 IP:202.145.xxx.xxx 未訂閱
這個問題我也遇過,執行程式已開啟不過就是找不到該視窗, 若是用按鍵手按可順利抓到hwnd,但若用程序則無法很順利抓到hwnd 最後改採delay(大概100ms) 多次尋找迴圈(幾十次可視情況而定)解決該問題 若是只用delay那每個delay都需最長時間那對程序執行時間會托的很長
系統時間:2024-05-22 0:45:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!