久久―日本道色综合久久,亚洲欧美精品在线,狼狼色丁香久久婷婷综合五月,香蕉人人超,日本网站黄,国产在线观看不卡免费高清,无遮挡的毛片免费

2023信創(chuàng)獨(dú)角獸企業(yè)100強(qiáng)
全世界各行各業(yè)聯(lián)合起來,internet一定要實(shí)現(xiàn)!

巧妙保證程序只有一個(gè)實(shí)例打開

2004-02-14 eNet&Ciweek

  ---- Windows應(yīng)用程序可以同時(shí)打開多個(gè)實(shí)例,有時(shí)候要限制用戶只能打開應(yīng)用程序的一個(gè)實(shí)例。最簡單的方法是用 FindWindow函數(shù)檢測有沒有某個(gè)標(biāo)題的窗口存在,但只這樣無法處理標(biāo)題欄自動(dòng)改變的程序。有資料介紹了枚舉 Windows任務(wù)列表的辦法,但較為復(fù)雜。   

  ---- 一個(gè)巧妙的方法是用文件(或注冊(cè)表)結(jié)合FindWindow函數(shù)來實(shí)現(xiàn)。其思路是:程序運(yùn)行時(shí)在一個(gè)特定文件(或注冊(cè)表中)做個(gè)"運(yùn)行標(biāo)記",同時(shí)記錄窗口的標(biāo)題,當(dāng)窗口標(biāo)題變化時(shí)同時(shí)修改記錄的窗口標(biāo)題,在退出刪除"運(yùn)行標(biāo)記"或做個(gè)"結(jié)束標(biāo)記",刪除記錄的窗口標(biāo)題。這樣,在程序運(yùn)行時(shí)先檢測特定文件(或注冊(cè)表)中有沒有"運(yùn)行標(biāo)記"。如果有"運(yùn)行標(biāo)記",再用FindWindow檢測有沒有所記錄標(biāo)題的窗口在運(yùn)行。如果有則報(bào)警退出(或激活已經(jīng)運(yùn)行的實(shí)例窗口),如果沒有則可能是程序上次不正常退出,提示用戶并讓用戶決定是否運(yùn)行?! ?

  ---- 下面以C++Builder做示范:   

  啟動(dòng)時(shí)的檢測可加在項(xiàng)目文件 Project1.cpp中:  

  #include < IniFiles.hpp >

  //增加代碼

  WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

  {

  TIniFile *RunFlag=new TIniFile("MyTest.ini");

  //增加代碼

  AnsiString RunCaption[2];   //增加代碼

  try

  {

  Application- >Initialize();

      //以下為增加代碼

  if(RunFlag->ReadInteger("Rec","RunFlag",0)==1)

  {

  RunCaption[0]=RunFlag- >ReadString("Rec","Caption","");

  HWND PrevWindow=FindWindow

  ("TForm1",RunCaption[0].c_str());

  if(PrevWindow)

  {

  ShowWindow(PrevWindow,SW_SHOW);

  SetForegroundWindow(PrevWindow);

  Application- >Terminate();

  }

  else

  {

  int button = Application- >MessageBox

  ("上次沒有正常退出,要繼續(xù)運(yùn)行嗎?",

  "警告", MB_OKCANCEL);

  if (button == IDCANCEL)

  Application- >Terminate();

  }

  }

  else

  { RunFlag- >WriteInteger("Rec","RunFlag",1);

  RunFlag- >WriteString("Rec","Caption","Form1");

  }

  delete RunFlag;

    //上面的為增加代碼

  Application- >CreateForm(__classid(TForm1), &Form1);

  Application- >Run();

  }

  catch (Exception &exception)

  { Application- >ShowException(&exception);}

  return 0;

  }  

  ---- 每個(gè)退出程序的地方必須加上以下處理代碼,如Form的OnClose事件處理函數(shù)中、使用exit()函數(shù)前:

  

  TIniFile *RunFlag=new TIniFile("MyTest.ini");

  RunFlag- >WriteInteger("Rec","RunFlag",0);

  RunFlag- >WriteString("Rec","Caption","");   

  每當(dāng)標(biāo)題變化時(shí)(如變?yōu)?歡迎光臨")必須加上以下處理代碼:  

  RunFlag- >WriteString("Rec","Caption","歡迎光臨");

相關(guān)頻道: eNews

您對(duì)本文或本站有任何意見,請(qǐng)?jiān)谙路教峤?,謝謝!

投稿信箱:tougao@enet16.com