如何做到程式自我關閉後,自動重新啟動 ? |
尚未結案
|
hazard
一般會員 發表:30 回覆:24 積分:10 註冊:2006-10-28 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hi hazard 你好:
在要關閉的程式中寫如下
procedure TForm1.Button1Click(Sender: TObject); begin WinExec('Project2.exe', SW_Show); Close; end;這會啟動另一個程式, 另一隻放一個TTimer, 我是設定5秒, 程式如下 unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, TlHelp32; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; spid:Integer; PH : THandle; implementation function ApplicationUse(fName : string) : boolean; var hSS: THandle; ProcEntry32: PROCESSENTRY32; iCount: Integer; begin Result := False; iCount := 0; hSS := CreateToolHelp32Snapshot(TH32CS_SNAPALL, 0); ProcEntry32.dwSize := sizeof(ProcEntry32); if Process32First(hSS, ProcEntry32) then begin repeat if UpperCase(ProcEntry32.szExeFile) = UpperCase(fName) then begin spid := ProcEntry32.th32ProcessID; Inc(iCount); if iCount >= 1 then begin Result := True; Break; end; end; until not Process32Next(hSS, ProcEntry32); CloseHandle(hSS); end; if Result then Exit; end; {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if not ApplicationUse('Project1.exe') then begin WinExec('Project1.exe', SW_SHOW); Close; end; end; end.程式碼參考 http://delphi.ktop.com.tw/topic.php?topic_id=34139 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2004/11/05 16:40:16
------
我不是高手, 高手是正在銀幕前微笑的人. |
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
您找我嗎
我沒有用到 class="code">
try
您要做的事
except //發生錯誤時
WinExec('Project1.exe 參數1 參數2', SW_SHOW);
Close;
end;
即可..
您可以送參數給自己..當呼叫下一個自己時該做什麼事
例如..WinExec('Project1.exe BACKGROUND', SW_SHOW);
然後寫再FormActivate中..
procedure TForm1.FormActivate(Sender: TObject); begin if ParamStr(1)='BACKGROUND' then begin self.hide; end; end;如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK 發表人 - |
JammyHsu
一般會員 發表:14 回覆:39 積分:10 註冊:2003-09-08 發送簡訊給我 |
引言: 您可以送參數給自己..當呼叫下一個自己時該做什麼事 例如..WinExec('Project1.exe BACKGROUND', SW_SHOW); 然後寫再FormActivate中..procedure TForm1.FormActivate(Sender: TObject); begin if ParamStr(1)='BACKGROUND' then begin self.hide; end; end;如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK >>< face="Verdana, Arial, Helvetica"> 那如果原程式有防止重覆執行 在時間點上沒問題吧 ********************************** 做簽名檔就跟寫程式一樣,想不出來! |
geniustom
版主 發表:100 回覆:303 積分:260 註冊:2003-01-03 發送簡訊給我 |
引言:引言: 您可以送參數給自己..當呼叫下一個自己時該做什麼事 例如..WinExec('Project1.exe BACKGROUND', SW_SHOW); 然後寫再FormActivate中..procedure TForm1.FormActivate(Sender: TObject); begin if ParamStr(1)='BACKGROUND' then begin self.hide; end; end;如此就可以在發生錯誤後自動重啟..並且自動隱藏..使用者不會發覺 GOOD LUCK >>< face="Verdana, Arial, Helvetica"> 那如果原程式有防止重覆執行 在時間點上沒問題吧 ********************************** 做簽名檔就跟寫程式一樣,想不出來! >>< face="Verdana, Arial, Helvetica"> 當然會有問題囉..不過還是有解決辦法ㄚ 防止程式重啟..可以將思考方向改為"關閉先前執行相同的程式" 寫在 |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
hazard
一般會員 發表:30 回覆:24 積分:10 註冊:2006-10-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |