青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

如何做到像《金山詞霸》一樣只運行一個實例 --------- zt

如何做到像《金山詞霸》一樣只運行一個實例

作者:孫鑫           日期:2002-7-30

我們在使用《金山詞霸》時發現,在《金山詞霸》已經運行了的情況下,再次點擊《金山詞霸》的圖標,那么它不會再運行另外一個《金山詞霸》,而是將已有的《金山詞霸》給激活,始終只能運行一個《金山詞霸》的實例。

在我們的程序當中如果要實現類似《金山詞霸》的功能,就要解決兩個問題,首先是要判斷該程序已有一個實例在運行,其次是要將已運行的應用程序實例激活,同時退出第二個應用程序實例。

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

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

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

1、在應用程序類InitInstance()函數中判斷是否已有一個應用程序實例正在運行。

BOOL CMutexApp::InitInstance()

{

       //創建命名信標對象。

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

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

       {

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

              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;                      //退出實例。

                            }

                            //繼續尋找下一個窗口。

                            hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);

                     }

                    

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

              }

       }

       else

       {

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

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

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,"維新");

}

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

posted on 2007-08-29 11:32 大龍 閱讀(190) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲高清三级视频| 久久aⅴ国产欧美74aaa| 制服丝袜亚洲播放| ●精品国产综合乱码久久久久| 欧美日韩在线播放三区| 国产精品一区二区你懂得| 欧美全黄视频| 欧美国产日产韩国视频| 久久久久久久综合| 狠狠爱www人成狠狠爱综合网| 亚洲免费影视| 久久在线免费| 欧美一级一区| 国产精品乱码| 欧美激情综合色| 国产综合精品| 夜夜爽夜夜爽精品视频| 在线看片日韩| 亚洲一区中文字幕在线观看| 在线日韩电影| 久久国产66| 亚洲主播在线观看| 欧美成年人视频| 久久免费视频在线| 国产精品第十页| 一区二区av在线| 日韩网站免费观看| 欧美mv日韩mv国产网站| 久久国产一区二区三区| 国产精品久久久久久久午夜片| 亚洲愉拍自拍另类高清精品| 亚洲综合大片69999| 久久精品亚洲一区二区三区浴池| 男人的天堂成人在线| 欧美一区二区三区在线看| 农村妇女精品| 国产精品美女视频网站| 中日韩美女免费视频网址在线观看| 欧美一区二区三区电影在线观看| 欧美在线视频免费| 欧美在线一区二区| 蜜桃久久av一区| 久久精品国产免费观看| 欧美午夜精品久久久久久孕妇| 国产综合18久久久久久| 午夜亚洲性色视频| 亚洲第一偷拍| 欧美国产三区| 另类欧美日韩国产在线| 欧美激情1区| 99国产精品久久久久久久成人热 | 中文国产亚洲喷潮| 国产精品剧情在线亚洲| 老司机精品视频一区二区三区| 久久精品伊人| 欧美亚洲在线播放| 欧美激情一区二区三区全黄| 欧美α欧美αv大片| 国产精品亚洲综合天堂夜夜| 亚洲精品国产精品乱码不99| 国产精品国产三级国产普通话三级| 久久九九99| 国产精品日本精品| 亚洲午夜极品| 羞羞色国产精品| 国产午夜精品一区二区三区欧美 | 好看的av在线不卡观看| 久久久久久网站| 亚洲欧美在线高清| 亚洲国产欧美在线| 欧美日本韩国一区二区三区| 久久综合色播五月| 欧美电影在线| 性欧美1819sex性高清| 国产精品天天看| 久久精品女人天堂| 麻豆国产精品va在线观看不卡| av成人免费在线观看| 国产精品久久久久久户外露出| 国产精品99久久久久久人| 新狼窝色av性久久久久久| 亚洲国产精品久久91精品| 午夜精品偷拍| 亚洲精品在线看| 韩日欧美一区二区| 国产欧美精品在线播放| 老司机午夜精品视频| 亚洲一区二区三区777| 欧美国产日韩一二三区| 欧美专区在线观看| 一本色道久久综合亚洲精品高清| 国产精品免费小视频| 蜜月aⅴ免费一区二区三区| 亚洲已满18点击进入久久| 久色婷婷小香蕉久久| 翔田千里一区二区| 欧美亚洲专区| 亚洲女爱视频在线| 亚洲一区二区三区乱码aⅴ| 亚洲国产另类 国产精品国产免费| 国产精品成人一区二区三区夜夜夜| 久久婷婷影院| 欧美一区二区免费视频| 亚洲在线电影| 亚洲小少妇裸体bbw| 亚洲电影免费在线| 亚洲激情校园春色| 国产亚洲精品综合一区91| 欧美午夜视频在线| 亚洲国产日韩欧美在线99| 久久久久成人精品免费播放动漫| 亚洲色在线视频| 性欧美办公室18xxxxhd| 免费中文字幕日韩欧美| 久久综合九色综合欧美狠狠| 久久久久久久一区二区三区| 久久久之久亚州精品露出| 免费欧美日韩| 欧美日本精品| 激情欧美一区二区| 欧美一区二区网站| 欧美韩日高清| 欧美一区二区三区四区在线观看地址 | 午夜伦欧美伦电影理论片| 欧美韩日一区| 一区二区三区自拍| 欧美在线视频免费观看| 99v久久综合狠狠综合久久| 欧美专区亚洲专区| 国产一区二区三区黄| 亚洲欧美一区二区原创| 亚洲网友自拍| 国产精品亚洲精品| 久久亚洲综合网| 欧美一区午夜精品| 午夜精品久久久久久99热| 国产一区香蕉久久| 久久久777| 欧美中在线观看| 欧美精品一区二区精品网| 最近看过的日韩成人| 久久综合99re88久久爱| 亚洲视频香蕉人妖| 国产精品视频福利| 欧美色道久久88综合亚洲精品| 国产精品一区二区在线观看网站 | 欧美在线一二三| 亚洲免费影视第一页| 国产一区二区三区高清在线观看 | 亚洲第一天堂av| 国产精品免费在线| 999在线观看精品免费不卡网站| 国产欧美日韩不卡免费| 午夜国产一区| 久久久综合网站| 日韩午夜电影在线观看| 亚洲最新合集| 狠狠色噜噜狠狠狠狠色吗综合| 久久噜噜噜精品国产亚洲综合| 久久精品国产一区二区电影| 国产精品一区在线观看你懂的| 久久精品亚洲乱码伦伦中文| 亚洲欧美日韩精品一区二区| 狠狠久久综合婷婷不卡| 在线精品一区| 亚洲最新中文字幕| 激情婷婷久久| 亚洲精品国产系列| 亚洲国产精品久久久久秋霞蜜臀| 99在线精品观看| 国内精品99| 久久精品午夜| 羞羞视频在线观看欧美| 久久精品人人做人人综合 | 亚洲桃色在线一区| 国产日韩欧美在线播放不卡| 久久精品噜噜噜成人av农村| 亚洲国产精品精华液网站| 亚洲午夜一级| 欧美第一黄网免费网站| 久久亚洲国产成人| 亚洲二区免费| 激情久久久久久久| 欧美在线视频导航| 亚洲综合色噜噜狠狠| 欧美日韩在线播放三区| 99v久久综合狠狠综合久久| 亚洲国产综合91精品麻豆| 午夜精品久久久久久久99热浪潮| 一本色道久久99精品综合| 欧美日韩一区二区三区视频 | 99在线精品视频| 欧美亚洲第一页| 午夜精品区一区二区三| 亚洲九九九在线观看| 欧美精品激情blacked18| 亚洲精品国产精品国自产在线| 亚洲美女福利视频网站| 欧美韩日亚洲| 亚洲午夜影视影院在线观看|