亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

讓應用程序只運行一個實例的實現(xiàn)方法

2020-01-26 16:17:19
字體:
供稿:網(wǎng)友

在我們的程序當中如果要實現(xiàn)類似《360軟件管家》的功能,就要解決兩個問題,首先是要判斷該程序已有一個實例在運行,其次是要將已運行的應用程序?qū)嵗せ睿瑫r退出第二個應用程序?qū)嵗?/P>

對于第一個問題,我們可以通過設(shè)置命名互斥對象或命名信標對象,在程序啟動的時候檢測互斥對象或信標對象,如互斥對象或信標對象已存在,則可以判斷此程序已有一個實例正在運行。

第二個問題是如何找到已經(jīng)運行的應用程序?qū)嵗?,如果我們能夠找到已運行實例主窗口的指針,即可調(diào)用SetForegroundWindow來激活該實例。我們可以通過兩種形式找到已運行實例的主窗口,一種形式是通過調(diào)用FindWindowEx去查找正在運行的窗口的句柄,這種方式用得比較多一些,而本文通過另一種形式去查找正在運行的窗口的句柄。通過調(diào)用SetProp給應用程序主窗口設(shè)置一個標記,用GetDesktopWindow 可以獲取Windows環(huán)境下的桌面窗口的句柄,所有應用程序的主窗口都可以看成該窗口的子窗口,接著我們就可以用GetWindow函數(shù)來獲得這些窗口的句柄。然后再用Win32 SDK函數(shù)GetProp查找每一個應用程序的主窗口是否包含有我們設(shè)置的標記,這樣就可以找到我們要找的第一個實例主窗口。

下面演示代碼是以一個單文檔應用程序為例,工程名字是Mutex。

復制代碼 代碼如下:

1、在應用程序類InitInstance()函數(shù)中判斷是否已有一個應用程序?qū)嵗谶\行。

BOOL CMutexApp::InitInstance()

{

       //創(chuàng)建命名信標對象。

       HANDLE hSem=CreateSemaphore(NULL,1,1,"維新");

       if(hSem)  //信標對象創(chuàng)建成功。

       {

              //信標對象已經(jīng)存在,則程序已有一個實例在運行。

              if(ERROR_ALREADY_EXISTS==GetLastError())

              {                 

                     CloseHandle(hSem);      //關(guān)閉信號量句柄。

 

//獲取桌面窗口的一個子窗口。

                     HWND hWndPrev=::GetWindow(::GetDesktopWindow(),GW_CHILD);  

 

                     while(::IsWindow(hWndPrev))

                     {

                     //判斷窗口是否有我們預先設(shè)置的標記,如有,則是我們尋找的窗口,并將它激活。

                            if(::GetProp(hWndPrev,"維新"))  

                            {

                            //如果主窗口已最小化,則恢復其大小。

                                   if (::IsIconic(hWndPrev))    

                                          ::ShowWindow(hWndPrev,SW_RESTORE);

 

                                   //將應用程序的主窗口激活。

                                   ::SetForegroundWindow(hWndPrev);

                                   return FALSE;                      //退出實例。

                            }

                            //繼續(xù)尋找下一個窗口。

                            hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);

                     }

                   

                     AfxMessageBox("已有一個實例在運行,但找不到它的主窗口!");

              }

       }

       else

       {

              AfxMessageBox("創(chuàng)建信標對象失敗,程序退出!");

              return FALSE;

       }

 

       AfxEnableControlContainer();

 

       // Standard initialization

       // If you are not using these features and wish to reduce the size

       //  of your final executable, you should remove from the following

       //  the specific initialization routines you do not need.

     

#ifdef _AFXDLL

       Enable3dControls();                     // Call this when using MFC in a shared DLL

#else

       Enable3dControlsStatic();      // Call this when linking to MFC statically

#endif

 

       // Change the registry key under which our settings are stored.

       // TODO: You should modify this string to be something appropriate

       // such as the name of your company or organization.

       SetRegistryKey(_T("Local AppWizard-Generated Applications"));

 

       LoadStdProfileSettings();  // Load standard INI file options (including MRU)

 

       // Register the application's document templates.  Document templates

       //  serve as the connection between documents, frame windows and views.

 

       CSingleDocTemplate* pDocTemplate;

       pDocTemplate = new CSingleDocTemplate(

              IDR_MAINFRAME,

              RUNTIME_CLASS(CMutexDoc),

              RUNTIME_CLASS(CMainFrame),       // main SDI frame window

              RUNTIME_CLASS(CMutexView));

       AddDocTemplate(pDocTemplate);

 

       // Parse command line for standard shell commands, DDE, file open

       CCommandLineInfo cmdInfo;

       ParseCommandLine(cmdInfo);

 

       // Dispatch commands specified on the command line

       if (!ProcessShellCommand(cmdInfo))

              return FALSE;

 

       // The one and only window has been initialized, so show and update it.

       m_pMainWnd->ShowWindow(SW_SHOW);

       m_pMainWnd->UpdateWindow();

 

       return TRUE;

}

2、在框架類的OnCreate()函數(shù)中設(shè)置查找標記。

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

       if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

              return -1;

     

       if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP

              | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

              !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

       {

              TRACE0("Failed to create toolbar/n");

              return -1;      // fail to create

       }

 

       if (!m_wndStatusBar.Create(this) ||

              !m_wndStatusBar.SetIndicators(indicators,

                sizeof(indicators)/sizeof(UINT)))

       {

              TRACE0("Failed to create status bar/n");

              return -1;      // fail to create

       }

 

       // TODO: Delete these three lines if you don't want the toolbar to

       //  be dockable

 

       m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

       EnableDocking(CBRS_ALIGN_ANY);

       DockControlBar(&m_wndToolBar);

 

     

       //設(shè)置查找標記。

       ::SetProp(m_hWnd,"維新",(HANDLE)1);

 

       return 0;

}

3、在程序退出是刪除設(shè)置的標記,在框架類中響應WM_DESTROY消息,進行處理。

void CMainFrame::OnDestroy()

{

       CFrameWnd::OnDestroy();

     

       // TODO: Add your message handler code here

       //刪除所設(shè)置的標記。

       ::RemoveProp(m_hWnd,"維新");

}

至此,使應用程序只運行一個實例的功能就完成了。

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

亚洲精品国模| 日韩精品亚洲aⅴ在线影院| 欧美激情精品久久久久久变态| 7777精品伊人久久久大香线蕉完整版| 午夜av一区二区| 久久精彩视频| 久久午夜宅男免费网站| 欧美一区二区三区四区在线观看地址| 国产秀色在线www免费观看| 人人狠狠综合久久亚洲| 自拍av在线| 操喷在线视频| 日韩伦理一区| 免费黄色网址在线| 午夜欧美大尺度福利影院在线看| 日韩av电影在线播放| 四虎影在永久在线观看| 亚洲成人动漫精品| 精品国产一区二区三区麻豆免费观看完整版| 久久狠狠久久综合桃花| 日本三级视频在线观看| 女性隐私黄www网站视频| 91在线视频国产| 国产精品毛片一区二区在线看| 91av毛片| 欧美性一区二区| 久久久久久激情| 亚洲美女网站18| 欧美性受ⅹ╳╳╳黑人a性爽| 国产麻豆午夜三级精品| 成人精品一区二区三区免费| 欧美精品一区二区三区视频| 98视频在线噜噜噜国产| 黄色片视频在线免费观看| 亚洲综合中文字幕在线| 欧美高清www午色夜在线视频| 亚洲天堂在线播放| 亚洲欧美日韩中文视频| 韩国av一区二区三区| 激情图片在线观看高清国产| 992在线观看| 精品国产一区二区三区免费| 亚洲国内在线| 日韩一区二区三区久久| 日韩极品视频在线观看| 国产一区二区三区四区| 亚洲精品精品一区| 中文字幕日韩电影| 啊v在线视频| 激情开心成人网| 中文字幕在线观看一区二区三区| 视频在线观看入口黄最新永久免费国产| 天堂美国久久| 精品奇米国产一区二区三区| 欧美日韩国产综合草草| 日韩美女视频在线| 翔田千里一区二区| 久久这里有精品| 午夜爽爽爽男女免费观看影院| 成人免费福利在线| 在线成人视屏| 国产精品动漫网站| 青青草国产成人久久91网| 无罩大乳的熟妇正在播放| 丁香六月综合激情| 国产一级性生活| 99在线精品视频| 欧美视频中文字幕在线| 免费国产亚洲视频| 91久久国产精品91久久性色| 五月婷婷丁香色| 美女久久久久久久| 狠狠色综合欧美激情| 嫩草研究院在线观看| 91丝袜美腿高跟国产极品老师| 欧美国产中文字幕| 国产人伦精品一区二区| 亚洲欧美成人综合| 亚洲第一成年人网站| 国产在视频一区二区三区吞精| 中文字幕免费精品| 国产无码精品一区二区| 美女写真久久影院| 国产精品午夜一区二区| 性xxxfllreexxx少妇| www.成人黄色| 国产aⅴ爽av久久久久成人| 欧美在线视频网| 色视频成人在线观看免| 天堂在线一区二区| 欧美理论一区二区| 亚洲黄色一区二区三区| 伊人久久大香线蕉综合影院首页| 伊人av成人| av中文字幕免费在线观看| 一区二区三区在线免费看| 欧美人与物videos| 成年人深夜视频| 亚洲日本va午夜在线电影| 国产乱码精品一区二区三区五月婷| 久久久久久久综合| 欧美成人精品一区| 欧美激情黑白配| 日韩欧美一区二区视频| 欧美日韩看看2015永久免费| 国产精品久久久久永久免费看| 亚洲大尺度在线观看| 亚洲福利精品视频| 51蜜桃传媒精品一区二区| 成人在线黄色| 一本一生久久a久久精品综合蜜| 大尺度一区二区| 亚洲精品免费播放| 亚洲品质视频自拍网| 日韩欧美精品免费| 一级做a爱片久久毛片| 国产亚洲成aⅴ人片在线观看| 这里只有精品在线观看视频| 男女视频一区二区| 人妻丰满熟妇av无码区hd| 欧美日本国产精品| 欧美日韩成人在线| 免费成人三级| 色欲人妻综合网| 久久久久久久久久电影| 亚洲综合五月天婷婷丁香| 久久久久久网| 五月天av在线| 日本免费网站视频| 日韩亚洲欧美一区二区| 成人欧美一区二区三区在线湿哒哒| 欧美jizzhd欧美精品巨大| 先锋影音男人av资源| 一区二区三区四区高清精品免费观看| 午夜在线精品偷拍| 欧美一区在线观看视频| 97视频在线观看视频免费视频| www.一区二区.com| 韩国av在线免费观看| 欧美成人精品欧美一| 天堂在线观看视频观看www| 99在线免费观看视频| 亚洲美女动态图120秒| 好吊色欧美一区二区三区| 在线观看av网页| 麻豆91精品91久久久| 亚洲av综合色区| 手机在线一区二区三区| 久久精品国产亚洲av高清色欲| 欧美精品一区二区在线播放| 日本国产在线观看| 国产宾馆实践打屁股91| 亚洲影院在线看| 日韩中文字幕免费观看| 九九九九九国产| 一区二区在线免费播放| 久久婷婷国产综合尤物精品| 丝袜+亚洲+另类+欧美+变态| 亚洲日本一区二区三区在线观看| 亚洲免费资源在线播放| 色yeye免费人成网站在线观看| 日韩中文字幕不卡视频| 少妇搡bbbb搡bbb搡打电话| 国产精品粉嫩av| 91丨九色丨蝌蚪丨老板| 日韩一区二区三区免费观看| 欧美日中文字幕| 亚洲最新中文字幕| 日韩新的三级电影| 糖心vlog免费在线观看| 在线观看你懂的网站| 成人亚洲性情网站www在线观看| 激情偷乱视频一区二区三区| 亚洲美女区一区| 波多野结衣作品集| 日韩和一区二区| 91午夜视频| 国产伦理片在线观看| 国产精品无码专区在线观看| 日本一区二区免费在线| 最新eeuss影院在线观看| 麻豆一区二区麻豆免费观看| 欧美视频免费一区二区三区| 一区二区三区视频网| 黑森林精品导航| 亚洲成人短视频| 亚洲av无码国产精品永久一区| 揄拍成人国产精品视频| 日本一区二区三区电影免费观看| 亚洲国产一区二区三区在线观看| 我看黄色一级片| 欧美日韩国产一级片| 老牛国内精品亚洲成av人片| 人妻 日韩精品 中文字幕| 岛国视频免费在线观看| 国产福利精品一区二区| 国产精品美女午夜爽爽| 国产成人a亚洲精v品无码| xx00欧美| 欧美激情一区二区三区| 亚洲一区二区黄色| 亚洲国产综合在线看不卡| 国产在线欧美日韩| 玖玖爱这里只有精品| 欧美一级精品大片| 亚洲一区二区福利视频| 成人小视频在线| 国产私拍一区| 亚洲国产wwwccc36天堂| 色一情一乱一伦一区二区三区日本| 国产精品中文久久久久久| 亚洲丁香婷深爱综合| 一区二区欧美久久| 久久av高潮av无码av喷吹| 色就是色欧美色图| 在线视频网站| 欧美日韩激情在线一区二区三区| 国产极品一区二区| 夜色福利资源站www国产在线视频| 亚洲一区二区福利| 亚洲一区二区影视| 国产成人精品在线看| 日韩成人亚洲| 久久精品在线| 国产亚洲精品美女久久久久久久久久| 欧美性高潮床叫视频| 国产精品久久久久久在线观看| 尤物九九久久国产精品的分类| 英国三级经典在线观看| 国产精品日韩欧美一区| 青青草久久爱| 国产精品户外野外| 奇米影视777在线欧美电影观看| 亚洲高清视频在线观看| 另类图片国产| 免费一区二区三区视频狠狠| 免费观看特级毛片| 亚洲国产成人av| 六月天综合网| 亚洲欧美视频一区| 亚洲二区中文字幕| 国产精品海角社区在线观看| 久久久久久高清| 欧美偷拍第一页| 一级片在线播放| 欧美亚洲黄色片| 中日韩高清电影网| 影音先锋男人在线| 精品欧美日韩| 在线观看麻豆视频| 国产黄视频网站| 色涩视频在线观看| 国产精品一区二区av白丝下载| av大全在线观看| 女人黄色一级片| 欧美三级在线观看视频| 91视视频在线直接观看在线看网页在线看| 国内精品久久久久国产| 日韩伦理片在线观看| 国产无遮挡又黄又爽免费软件| 一区二区三区动漫| 91美女在线免费观看| 国产一区二区三区四区大秀| 97在线资源在| 日本黄色免费在线观看| 日本中文字幕在线视频观看| 97人妻精品一区二区三区| 日本中文字幕免费观看| 精品久久久久久亚洲精品| 一级片免费观看视频| 亚洲视频国产视频| 亚洲av无码乱码国产麻豆| 激情视频极品美女日韩| 午夜欧美一区二区三区在线播放| 国内综合精品午夜久久资源| 日本激情视频在线播放| 岛国一区二区三区高清视频| 亚洲不卡中文字幕无码| 日韩欧美亚洲视频| 亚洲香蕉成视频在线观看| 久久亚洲综合色一区二区三区| 久久久久亚洲av无码a片| 国产在线视频精品一区| 热re66久久精品国产99热| 一道本在线观看| 久久99热99| 不卡伊人av在线播放| 四虎4hutv紧急入口| 日本少妇高清视频| 日本一区二区免费电影| 小早川怜子影音先锋在线观看| 国产你懂的在线观看| 51精品在线观看| 国产影视一区| 日韩免费视频在线观看| 欧美视频在线观看一区二区| 日韩五码在线观看| 在线资源免费观看| 先锋影音欧美性受| 手机看片福利永久| 日韩一级黄色片| 中文字幕久久综合| www.国产二区| 国产另类xxxxhd高清| 中文字幕欧美日韩在线不卡| www.激情网.com| 久久久成人的性感天堂| 97视频免费看| 杨钰莹一级淫片aaaaaa播放| 久久人人爽人人爽人人片av免费| 欧美精品在线一区| 人成免费在线视频| 欧美区一区二区三区| 亚洲欧美色图| 国产日产欧美一区二区视频| 精品无人区一区二区| 精品一区二区三区视频在线观看| 在线播放日韩av| 久久精品一区二区三区四区| 亚洲一区二区三区| 国产精品第一页第二页第三页| www.一区二区三区.com| 国产精品国产福利国产秒拍| 男人久久精品| 久草资源站在线观看| 色综合欧美在线视频区| 欧美一区二区三区……| 亚洲日本色图|