国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

巧妙保證程序只有一個實例打開

2019-11-17 05:27:49
字體:
供稿:網(wǎng)友

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

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

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

  啟動時的檢測可加在項目文件 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ù)運行嗎?",

  "警告", 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;

  }  

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

  

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

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 敦煌市| 皋兰县| 财经| 武乡县| 新绛县| 明星| 达孜县| 明星| 孟州市| 苏州市| 西畴县| 吉木萨尔县| 林口县| 达州市| 西充县| 千阳县| 长丰县| 东源县| 剑河县| 天柱县| 保康县| 盱眙县| 洪洞县| 丰宁| 芦山县| 呼和浩特市| 容城县| 澄江县| 阿拉善盟| 客服| 浙江省| 陇西县| 图们市| 乌恰县| 友谊县| 永清县| 江孜县| 洛阳市| 福州市| 左贡县| 高邮市|