只能運行程序的一個實例

 四、 只能運行程序的一個實例

當程序已經運行時,如果再次運行,則激活前一個實例。
實現原理:

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中添加相應的消息處理函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章