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

如何讓程式無法重複開啟??

答題得分者是:ko
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-13 09:19:50 IP:61.220.xxx.xxx 未訂閱
小弟想要讓Delphi開發的程式,不能同時讓一個user連續重複開啟??
------
ivankuo
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-13 09:28:10 IP:211.21.xxx.xxx 未訂閱
引言: 小弟想要讓Delphi開發的程式,不能同時讓一個user連續重複開啟??
您可能要在使用者的Table增加一個欄位,例如增加一個InUse的欄位預設為False,當user登錄後,將InUse寫成True,程式結束時將InUse寫成False,所以在登錄畫面時,你就判斷InUse為False才讓他開啟程式。我有用過這種方法,但有一缺點就是您的程式要夠穩定,如果你的程式當掉,那這位user就進不去了(因沒有時間將InUse寫成False)。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-13 09:39:08 IP:61.220.xxx.xxx 未訂閱
前輩: 如果我是某a程式中的MainMemu乎叫b程式,呼叫的時候用ShellExecute的方式,b程式用ParamStr來接收取得的字串參數值,但是當b程式要關閉時,如何丟回參數給a程式ㄋ??
------
ivankuo
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-13 10:06:29 IP:211.21.xxx.xxx 未訂閱
引言: 前輩: 如果我是某a程式中的MainMemu乎叫b程式,呼叫的時候用ShellExecute的方式,b程式用ParamStr來接收取得的字串參數值,但是當b程式要關閉時,如何丟回參數給a程式ㄋ??
sorry!我沒有用這種方式寫過,不過幫您找了一下,您參考一下: http://delphi.ktop.com.tw/topic.php?topic_id=18149 您也可以在搜尋文章打上ShellExecute的關鍵字,裏面還有很多文章,您可以參考看看。
------
~小弟淺見,參考看看~
Jeffrey
初階會員


發表:10
回覆:58
積分:38
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-13 10:10:21 IP:211.74.xxx.xxx 未訂閱
開啟.dpr檔案填入以下試試看:
    ...........    var li_HWD:integer;    begin
  CreateMutex(nil,true,pchar('xxx'));        //xxx:自行設一個的名稱
  if GetLastError=Error_already_exists then  //如果已開啟
  begin
      li_HWD:=FindWindow(NIL, 'yyy');         //yyy:Application.Title
      if ( li_HWD <> 0) then                  //將該程式Show出來
      begin
          ShowWindow(li_HWD, SW_MINIMIZE);   //先最小化,再Show才會
          ShowWindow(li_HWD, SW_SHOWNORMAL); //顯示在最上方
      end;
      halt;                                   //結束本程式
      exit;
  end;      Application.Initialize;  
  Application.CreateForm(TForm1, Form1);
   .......    
不知道有沒有什麼指令可以令某視窗直接顯示在最上方,並取得Focus? 發表人 - jeffrey 於 2003/03/14 08:58:24
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-13 10:34:30 IP:61.221.xxx.xxx 未訂閱
ivankuo 你好: 在程式啟動時,先偵測有無同樣的程式在跑! 如果有則將自己關閉!!! procedure TForm1.FormCreate(Sender: TObject); var PrevWnd: HWnd; begin PrevWnd := FindWindow(nil, 'Shuang-Shin'); if PrevWnd = 0 then begin Application.MessageBox('有相同主程式',OpError,mb_Ok); self.Close; exit ; end; end;
------
======================
昏睡~
不昏睡~
不由昏睡~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-13 10:51:21 IP:211.76.xxx.xxx 未訂閱
要令某視窗到最上層並取得 focus, 可以利用以下語法:    
procedure TForm1.Button1Click(Sender: TObject);
var
  hw: HWND;
begin
  hw := findwindow(0,'Untitled - Notepad');
  if hw <> 0 then
    SetWindowPos(hw, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); // 或使用 SetForegroundWindow(hw);
end;
發表人 - timhuang 於 2003/03/13 11:01:07
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-13 10:57:17 IP:211.76.xxx.xxx 未訂閱
引言: 在程式啟動時,先偵測有無同樣的程式在跑! 如果有則將自己關閉!!!
procedure TForm1.FormCreate(Sender: TObject);
var
PrevWnd: HWnd;
begin
  PrevWnd := FindWindow(nil, 'Shuang-Shin');
  if PrevWnd = 0 then
  begin
    Application.MessageBox('有相同主程式',OpError,mb_Ok);
    self.Close;
    exit ;
  end;
end;
ko 兄. 可能是你筆誤的關係. 應該是 if PrevWnd <> 0 then 才是找到已開啟的程式...
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-13 11:25:25 IP:61.220.xxx.xxx 未訂閱
引言: ivankuo 你好: 在程式啟動時,先偵測有無同樣的程式在跑! 如果有則將自己關閉!!! procedure TForm1.FormCreate(Sender: TObject); var PrevWnd: HWnd; begin PrevWnd := FindWindow(nil, 'Shuang-Shin'); if PrevWnd = 0 then begin Application.MessageBox('有相同主程式',OpError,mb_Ok); self.Close; exit ; end; end;
請問一下 PrevWnd := FindWindow(nil, 'Shuang-Shin');中的Shuang-Shin是指呼叫程式的form.caption ㄇ??
------
ivankuo
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-13 11:49:30 IP:61.221.xxx.xxx 未訂閱
ivankuo你好: 是低!! 也可以這樣說 是程式名稱
------
======================
昏睡~
不昏睡~
不由昏睡~
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-13 11:59:15 IP:61.220.xxx.xxx 未訂閱
ko、timhuang前輩: if PrevWnd <> 0 then 才是找到已開啟的程式... 到底哪個才是正確的,為何當我判斷=0的時候,都抓不到已經開啟程式ㄋ?? 還可以讓我一直開啟,可是用<>0 的時候,卻都無法開啟程式??
------
ivankuo
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-13 12:28:11 IP:61.220.xxx.xxx 未訂閱
不好意思,小弟發生大烏龍, 因為我以為只有在執行的form才算是會被findWindow找到, 忘記我的被呼叫程式的form正用delphi在修改,所以才會一直說我的程式已經被開啟。感謝各位幫忙。 不過小弟有原先的問題若改變另一種的方式達到目的,不知如何做,如果我的被呼叫的程式b是放在主程式a的MainMemu中,我在呼叫b程式時,就把他enabled為false,問題就在當我b程式要關閉的時候,我要如何將MainMemu中b程式的enabled改為true,我的b程式並未與a程式掛在同一個專案的情況下,也是用ShellExecute的方式來呼叫的。 請問怎做ㄋ??
------
ivankuo
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-13 13:49:22 IP:61.221.xxx.xxx 未訂閱
ivankuo你好: 很抱歉!! 程式有錯!! 今天作業環境不佳,空氣中有濃濃的強力膠味,導致精神恍惚..飄飄然... 可惡得裝潢公司..... 我更正程式碼 .. ... > >< face="Verdana, Arial, Helvetica">引言: 我在呼叫b程式時,就把他enabled為false,問題就在當我b程式要關閉的時候,我要如何將MainMemu中b程式的enabled改為true 當然也可以在觸發b程式的時候,觸發一個timer用上述的code偵測b是否存在當b 不存在時將a的功能true... 或者在b.close使用api傳一個訊息Messages給a,不過要使用的技巧比較麻煩
------
======================
昏睡~
不昏睡~
不由昏睡~
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-13 14:09:44 IP:211.74.xxx.xxx 未訂閱
提供一個我的做法 procedure TForm1.FormShow(Sender: TObject); var Hwnd: THandle; SEND: string; begin SEND := 'C:\123.exe'; Hwnd := FindWindow(nil, PCHAR('客戶資料'));//該程式的FormCaptionName if Hwnd = 0 then begin WinExec(PChar(SEND), 1); end else begin BringWindowToTop(Hwnd); end; end; TRY TRY SEE
Jeffrey
初階會員


發表:10
回覆:58
積分:38
註冊:2002-04-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-03-13 15:55:09 IP:211.74.xxx.xxx 未訂閱
引言: 要令某視窗到最上層並取得 focus, 可以利用以下語法:
procedure TForm1.Button1Click(Sender: TObject);
var
  hw: HWND;
begin
  hw := findwindow(0,'Untitled - Notepad');
  if hw <> 0 then
    SetWindowPos(hw, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); // 或使用 SetForegroundWindow(hw);
end;
發表人 - timhuang 於 2003/03/13 11:01:07
謝謝timhuang,可以了,但還有一個問題,當被啟動的程式在"最小化"的狀態時被Show出來後,其"最小化"的按鈕就失效了,除非,按滑鼠右鍵,點"還原"後才行,再請教前輩,要怎麼讓它"還原"?謝謝!
系統時間:2024-05-13 4:08:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!