国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > C > 正文

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

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

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

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

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

下面演示代碼是以一個單文檔應用程序為例,工程名字是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);      //關閉信號量句柄。

 

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

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

 

                     while(::IsWindow(hWndPrev))

                     {

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

                            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ù)中設置查找標記。

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);

 

     

       //設置查找標記。

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

 

       return 0;

}

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

void CMainFrame::OnDestroy()

{

       CFrameWnd::OnDestroy();

     

       // TODO: Add your message handler code here

       //刪除所設置的標記。

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

}

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

 

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

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
免费在线黄色网址| 丁香在线视频| 国产色a在线观看| 国产亚洲精品久久久久久青梅| 九九热在线免费视频| 国产麻豆免费| 国产精品你懂的在线观看| 另类综合图区| 国产三区四区在线观看| 91精品专区| 国产在线一二| 精品99又大又爽又硬少妇毛片| 在线黄色av| 成人av小说网| av超碰在线| 狠狠干五月天| 在线免费看av| 资源视频在线播放免费| 精品女厕厕露p撒尿| 国产在线观看91| 99中文字幕一区| 午夜伦全在线观看| 99热免费在线| 国产精品剧情一区二区三区| 亚洲wwwwww| 国产黄色在线观看| 成在在线免费视频| 四虎成人免费| 2018狠狠干| 尤物视频在线观看| 福利视频网址导航| 阿v免费在线观看| 999在线视频| 最近中文字幕大全中文字幕免费| 一区二区免费播放| 国产探花在线观看| 日本中文字幕在线视频| 一本大道香蕉8中文在线视频| 国产亚av手机在线观看| 九九热视频免费观看| 在线观看精品一区二区三区| 91亚洲欧美| 一级二级在线观看| 亚洲视频网站在线| a级片国产精品自在拍在线播放| 精品视频三区| av在线免费观看网| 青青青手机在线视频观看| 日韩亚洲一区中文字幕| www.国产精| 国产有码在线| 中文字幕在线影视资源| 精品中文字幕不卡在线视频| 久久久久久久久亚洲精品| 国产尤物一区二区三区| 五月婷婷丁香激情| 精品一二三区视频| 伊人免费在线| 超碰在线影院| 国产精品666| 青青艹在线视频| 成在线人视频免费视频| 国产夫妻视频| 蜜桃av网站| 国产三级在线免费观看| 在线中文视频| 成年网站免费入口在线观看| 福利视频网址导航| 国产精品视频一区二区三区麻豆| 国产精品视频一区二区久久 | 国产丝袜在线播放| 精精国产xxxx视频在线| 美女免费视频黄| 国产传媒在线播放| 日本a级黄色| 国产激情视频在线| 狠狠操视频网站| 国产精品186在线观看在线播放| 中文字幕av在线| 中文字幕在线免费| 麻豆国产在线视频| 中文岛国精品亚洲一区| 国产剧情av在线| 亚洲精品影院在线| 国产精品人人| 最近中文字幕大全中文字幕免费| 午夜影院免费看| 精品美女调教视频| 国产黄色av免费看| 国产鲁鲁视频在线观看免费| jizz性欧美| 四虎成年永久免费网站| 在线91av| 五月婷婷视频在线观看| 久草.com| 国产美女一区视频| 国产麻豆一区二区三区精品| 欧美色第一页| 免费不卡中文字幕视频| a视频免费看| 亚洲人成影院在线| 99久久免费精品国产免费| 91xx在线观看| 精品伦理一区二区| 69堂视频在线观看国产| 国产视频中文字幕| 国产偷窥洗澡视频| 成在在线免费视频| 尤物网站在线| 96久久久久久| av在线不卡网站| 九九热在线视频| 五月婷婷在线视频| 国产视频97| 99热99re6国产在线播放| 亚洲尤物在线视频| 牛牛热在线视频| 中文字幕在线影院| 国产国产人免费人成免费视频| 国产精品白浆流出视频| 精品成人一区二区三区免费视频| 伊人av免费在线观看| 伊人永久在线| 久蕉依人在线视频| 国产福利电影在线观看| 性网站在线播放| 成网站在线观看人免费| 国产一级黄色| 亚洲精品天堂在线观看| 成人福利视频导航| 在线中文视频| 国产在线一二| 97在线超碰| 成网站在线观看人免费| 在线观看电影av| 91caoporn在线| www.xxx黄| 最新中文字幕av专区| 国产黄视频网站| 免费不卡中文字幕视频| 2019年中文字幕| 国产一起色一起爱| 日本成a人片在线观看| 国产黄在线观看| 国产精品一区二区婷婷| 热99re久久精品精品免费| 国产激情在线观看| 国产亚洲精品拍拍拍拍拍| 开心快乐六月丁香婷婷| 在线观看免费视频一区二区三区| 最新天堂资源在线资源| 狠狠操狠狠色| 四虎精品成人a在线观看| 国产精品二线| 国产精品区一区二| 最新天堂资源在线资源| 国产在线精品一区二区不卡| 亚洲欧美中文字幕在线观看| 69久久久久| 国产成人无吗| 国产不卡在线| 99精品老司机免费视频| 97视频在线| av在线免费播放网站| 亚洲精品久久久成人| av片在线观看| 久久国产综合视频| 蜜桃av网站| 国产乱码在线| 中文字幕不卡免费视频| 精品一区二区三区免费站| 精品国产一区二区三区不卡在线| 国产va在线观看| 亚洲sss视频| 黄网址在线播放免费| 国产精品亚洲第五区在线| 国产视频福利在线| 国产youjizz在线| 在线观看中文字幕一区| 四虎成人免费| 国产亚洲精品自在线观看| 7777在线| 青青草原国产在线观看| 国产中文在线视频| 国产精品777一区二区| 在线观看中文字幕| 成人av小说网| av人人综合网| 国产精品人人| 免费在线看v| 国产超碰在线| 国产免费福利| av在线不卡播放| 国产网友自拍视频导航网站在线观看| 91精品大全| 国产三区在线观看| xxxxx中文字幕| 中文字幕日本三级| 青青青青在线| 国产不卡视频|