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

請問如何讓BCB開啟一個執行檔

 
iammaytoo
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-08-16 13:34:58 IP:218.168.xxx.xxx 未訂閱

我想要讓某個BCB的程式去開啟另一個BCB程式的執行檔

我嘗試過使用winexec 和 ShellExecute 這兩中方式

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//WinExec("Question_v1.1\\a.exe",SW_SHOWNORMAL);
//ShellExecute(NULL,NULL,"Question_v1.1\\a.exe",NULL,NULL,NULL);
}

如程式碼所見,我適用一個Button來去觸發,可是按下去之後總是沒有反應

可是我打開工作管理員的處理程序裡卻有看到a.exe在執行,而且佔了CPU99%

後來我又使用另一個程式的執行檔執行看看,卻又可以呼叫出來,在螢幕上我也看的見

這兩個執行檔一個有使用到視訊和資料庫 ,另一個則只有單存的視訊

我在各大論壇上有看到還有另一種方式createprocess,看是看到的都適用在Delphi上的

所以用法也不是很清楚......

不知道哪位大大可以幫我解答一下

iammaytoo
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-08-16 13:37:12 IP:218.168.xxx.xxx 未訂閱

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//WinExec("Question\\Project1.exe",SW_SHOWNORMAL);
//ShellExecute(NULL,NULL,"Question_v1.1\\a.exe",NULL,NULL,NULL);
}

程式碼我忘了說,我在compiler時會把其中一個的//拿掉

aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-08-16 18:56:38 IP:61.229.xxx.xxx 未訂閱
<p>我想是不是因為你要執行的那程式很特別,並沒有呼叫到GetMessage()這個function,導致程式沒法回來而停住!</p> <p>可以試一下你說的createprocess的方法如下:</p> <p>&nbsp;</p>
<textarea class="cpp" rows="10" cols="60" name="code"> STARTUPINFO si; PROCESS_INFORMATION pi; LPTSTR szCmdline=_tcsdup(TEXT("test\\project1")); //Command line 的形式就可以 ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line) szCmdline, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi ) // Pointer to PROCESS_INFORMATION structure ) { ShowMessage(String("").cat_sprintf("CreateProcess failed (%d).\n", GetLastError())); return; } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); </textarea>
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-08-16 19:07:36 IP:61.229.xxx.xxx 未訂閱
忘了說…
LPTSTR szCmdline=_tcsdup(TEXT("test\\project1")); //Command line 的形式就可以
這句話需要#include
其實也是可以換成
LPTSTR szCmdline="test\\project1";
就不需要include了!
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
iammaytoo
一般會員


發表:1
回覆:2
積分:0
註冊:2006-08-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-08-16 21:16:53 IP:218.168.xxx.xxx 未訂閱

謝謝你....我試試看

flair
一般會員


發表:0
回覆:4
積分:0
註冊:2003-04-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-06 23:18:42 IP:59.121.xxx.xxx 訂閱
WaitForSingleObject 使用後,會將整個程序佔住...
可否不要佔住整個程序,原本的主程式,仍然可以動....
系統時間:2024-04-30 18:45:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!