當程序已經運行時,如果再次運行,則激活前一個實例。
實現原理:
1. 只運行一個實例
#define UNIQE_NAME "{1AB792D6-EEF2-4528-9A84-91356811E7A4}"BOOL CRaclientApp::InitInstance()函數中加入
m_hOneInstance = ::CreateMutex( NULL,FALSE,UNIQE_NAME); if ( GetLastError() == ERROR_ALREADY_EXISTS )//如果存在前一個 { //發送消息,激活實例 DWORD dwRecipients = BSM_APPLICATIONS; ::BroadcastSystemMessage( BSF_NOHANG,&dwRecipients, ID_RA_MSG, // registered window message 0,0 ); // user defined parameters return FALSE; }還要在CRaclientApp::ExitInstance()中
CloseHandle(m_hOneInstance);2、激活前一個實例
#define ra_MSG "{D48CA923-4925-41cb-8F56-ABAAAFCEF787}" const UINT ID_RA_MSG =::RegisterWindowMessage(ra_MSG);//註冊消息然後再CmainFrame中添加相應的消息處理函數。