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

ShellExecute和WinExec

答題得分者是:RaynorPao
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-18 15:07:53 IP:163.25.xxx.xxx 未訂閱
ShellExecute(Form1->Handle,"open","D:\Microsoft Office\Office\WinWord.Exe",NULL,NULL,SW_SHOWNORMAL); WinExec("D:\Microsoft Office\Office\WinWord.Exe",SW_NORMAL); 1.上面這兩行程式在bcb寫的,不知道對不對? 2.這兩行程式會傳錯誤嗎 ,如何抓到錯誤碼? 3.handle是啥啊 ,是int還是char型態
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-18 15:24:11 IP:203.73.xxx.xxx 未訂閱
引言: ShellExecute(Form1->Handle,"open","D:\Microsoft Office\Office\WinWord.Exe",NULL,NULL,SW_SHOWNORMAL); WinExec("D:\Microsoft Office\Office\WinWord.Exe",SW_NORMAL); 1.上面這兩行程式在bcb寫的,不知道對不對? 2.這兩行程式會傳錯誤嗎 ,如何抓到錯誤碼? 3.handle是啥啊 ,是int還是char型態
a120803 你好: (1)你自己都還沒有試過,發問是為了什麼呢?? (2)你自己都還沒有試過,發問是為了什麼呢?? (3)HANDLE 是四個 byte 的 DWORD(如果我沒有記錯的話) 備註: 你想要得到的一些資訊,在 M$DN 中都可以查得到 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/Shell/reference/functions/shellexecute.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/winexec.asp -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/18 16:07:01
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-18 16:05:00 IP:163.25.xxx.xxx 未訂閱
我有執行過 但是都沒有跑出MSWord視窗ㄝ 上兩行程式有錯嗎 在ShellExecute的Handle參數是要傳入Form->Handle嗎
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-18 16:05:09 IP:163.25.xxx.xxx 未訂閱
我有執行過 但是都沒有跑出MSWord視窗ㄝ 上兩行程式有錯嗎 在ShellExecute的Handle參數是要傳入Form->Handle嗎
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-18 16:14:42 IP:203.73.xxx.xxx 未訂閱
引言: 我有執行過 但是都沒有跑出MSWord視窗ㄝ 上兩行程式有錯嗎 在ShellExecute的Handle參數是要傳入Form->Handle嗎
a120803 你好:
(1)你的傳入字串寫錯了,要寫成這樣
   >>>    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-18 17:36:04 IP:163.25.xxx.xxx 未訂閱
謝謝版主回答問題 另外如何讓Word應用程式執行結束才跳至下一行程式執行呢,如以下程式? 這中間要加入什麼啊 WinExec("D:\Microsoft Office\Office\WinWord.Exe",SW_NORMAL); Table1->Open();
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-19 00:10:36 IP:61.221.xxx.xxx 未訂閱
引言: 謝謝版主回答問題 另外如何讓Word應用程式執行結束才跳至下一行程式執行呢,如以下程式? 這中間要加入什麼啊 WinExec("D:\Microsoft Office\Office\WinWord.Exe",SW_NORMAL); Table1->Open();
a120803 你好: 請改成以下的做法 < class="code"> HANDLE handle; handle=ShellExecute(Form1->Handle, "open", "D:\\Microsoft Office\\Office\\WinWord.Exe", NULL, NULL, SW_SHOWNORMAL); WaitForSingleObject(handle, INFINITE); Table1->Open(); -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-19 10:25:36 IP:61.231.xxx.xxx 未訂閱
引言:
引言: 謝謝版主回答問題 另外如何讓Word應用程式執行結束才跳至下一行程式執行呢,如以下程式? 這中間要加入什麼啊 WinExec("D:\Microsoft Office\Office\WinWord.Exe",SW_NORMAL); Table1->Open();
a120803 你好: 請改成以下的做法 < class="code"> HANDLE handle; handle=ShellExecute(Form1->Handle, "open", "D:\\Microsoft Office\\Office\\WinWord.Exe", NULL, NULL, SW_SHOWNORMAL); WaitForSingleObject(handle, INFINITE); Table1->Open(); -- Enjoy Researching & Developing --
原來叫用外部程式要等它結束用法是如此的簡單呀!真是受教了包大人 < > 這招也趕快學起來 < > <>沒空更新的網頁... < href="http://big5.to/吃軟也吃硬">http://big5.to/吃軟也吃硬 C及指標教學,計算機概論,資訊管理導論... http://home.kimo.com.tw/dllee.tw http://coolsite.to/ushells 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-19 10:40:22 IP:163.25.xxx.xxx 未訂閱
事實上加入WaitForSingleObject並不能使程式執行結束後再執行下一行程式 因為windows是多工的環境,我執行過 我想出在下列程式 ShellExecute() while ( !UnknownFunction() ); //UnknownFunction可一直偵測ShellExecute程式是否在執行,如果沒有則跳出迴圈,只是我不知道UnknownFunction是要用哪一個函數
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-19 10:50:19 IP:203.73.xxx.xxx 未訂閱
引言: 事實上加入WaitForSingleObject並不能使程式執行結束後再執行下一行程式 因為windows是多工的環境,我執行過 我想出在下列程式 ShellExecute() while ( !UnknownFunction() ); //UnknownFunction可一直偵測ShellExecute程式是否在執行,如果沒有則跳出迴圈,只是我不知道UnknownFunction是要用哪一個函數
a120803 你好: 請問你是如何做驗證的呢?? 先把程式碼改成以下這樣看看 < class="code"> HANDLE handle; handle=ShellExecute(Form1->Handle, "open", "D:\\Microsoft Office\\Office\\WinWord.Exe", NULL, NULL, SW_SHOWNORMAL); WaitForSingleObject(handle, INFINITE); ShowMessage("WinWord Terminate!");
備註:
(1)如果在 BCB 的 IDE 做測試(會有問題的)
(2)你必須直接執行你的 EXE(從檔案總管),然後再看結果如何?
(3)我的測試環境是 Windows 2000, SP3, BCB6.0, Update2,測試結果是沒有問
   題的
    <>< class="code">
//--------------------------------------------------------------------
更正!! 我又花時間試了一下,發現以上的做法,有時候可以,有的時候又不行
因此,我認定以上的說法是有問題的,因此,小弟我建議改成以下的做法
    STARTUPINFO si;
    PROCESS_INFORMATION pi;        ZeroMemory(&si, sizeof(si));
    si.cb=sizeof(si);
    ZeroMemory(&pi, sizeof(pi));        if(!CreateProcess(NULL, "\"C:\\Program Files\\Microsoft Office\\Office\\WinWord.Exe\"",
      NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
      ShowMessage("CreateProcess failed!" IntToStr(GetLastError()));
    }
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
    ShowMessage("WinWord terminate!");
//--------------------------------------------------------------------
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/19 11:29:46
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
a120803
初階會員


發表:61
回覆:66
積分:25
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-20 01:44:44 IP:163.25.xxx.xxx 未訂閱
謝謝RaynorPao 另外還有2個問題 1.如何接收經由ShellExecute呼叫的應用程式傳回值 2.WaitForSigleObject傳回值是啥啊 ,臥看不懂英文文件, 能用中文大概解釋一下嗎 謝謝
系統時間:2024-04-26 21:44:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!