如何將 用ShellExecute 開啟的外部程式關掉?? |
尚未結案
|
chi30
一般會員 ![]() ![]() 發表:5 回覆:17 積分:4 註冊:2005-01-20 發送簡訊給我 |
大家好,
請問要如何將 用ShellExecute 開啟的外部程式關掉??
用ShellExecute 執行一程式沒問題.
不過在BCB 的程式裡將其關掉, 就有問題了.
我用的是PostMessage 的方法. 不知有無其它可行的方法. 我的source 如下.
//*.h HWND m_Handle; //-------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //執行 console m_Handle = ShellExecute(Handle,NULL,"cmd.exe",NULL,NULL,SW_MAXIMIZE); } //-------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { PostMessage(m_Handle,WM_CLOSE,0,0); }YoHo~~~
------
YoHo~~~ |
GeorgeKu
中階會員 ![]() ![]() ![]() 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
chi30, 使用ShellExecute開啟外部程式,無法使用你的方法去關閉它,因為ShellExecute回傳的碼並不是真正的視窗的HANDLE,它是為了相容於16bit的WINDOW而保留下來的.
2種方法提供給你作為參考:
1)用ShellExecute的話,你可以使用FindWindow去找到你要關閉的程式窗口,然後用PostMessage去關閉它.
2)用CreateProcess去開啟外部程式,開啟成功同時取得Process handle,你就可以利用TerminateProcess去關閉掉它. 細節部分你可以參考其他相關的討論或從MSDN中取得各個函數說明.
|
chi30
一般會員 ![]() ![]() 發表:5 回覆:17 積分:4 註冊:2005-01-20 發送簡訊給我 |
謝謝George,
我已找到方法, 將方法與大家分享.
// variable declaration. DWORD rt; STARTUPINFO si; PROCESS_INFORMATION pi; Cardinal hPro; // vairable initialization ZeroMemory(&si,sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); // execute a external program. Open IE to browse a website. if(!CreateProcess(NULL,"C:\\Program Files\\Internet Explorer\\iexplore.exe http://192.168.1.80/sippis/",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) { ShowMessage("Didn't make it!"); } // close the program. GetExitCodeProcess(pi.hProcess,(unsigned long*)&hPro); TerminateProcess(pi.hProcess,(unsigned int) hPro);YoHo~~~
------
YoHo~~~ |
tzengdandan41
一般會員 ![]() ![]() 發表:0 回覆:1 積分:0 註冊:2005-10-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |