ShellExecute 與 FindWindow組合使用 |
尚未結案
|
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
我利用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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |