如何激活已经存在的一个进程

最近在研究如何只运行程序的一个实例,当第二次运行时,激活已经存在的进程的方法,其中一个方法就是通过GetWindow()函数来枚举窗口,然后依次调用GetPorp()函数来获取属性值,值为进程设置的值时,表示该窗口就是我们要查找的窗口,在BOOL CCTestApp::InitInstance()中加入以下代码

m_hMutex = CreateMutex(NULL,TRUE,_T("test"));

	if (m_hMutex == NULL)
	{
		return FALSE;
	}

	//如果程序已经存在并且正在运行
	if (GetLastError() == ERROR_ALREADY_EXISTS)
	{
		//获取桌面窗口的一个子窗口。 
		HWND hWndPrev=::GetWindow(::GetDesktopWindow(),GW_CHILD);    
		while(::IsWindow(hWndPrev))
		{
			//判断窗口是否有我们预先设置的标记,如有,则是我们寻找的窗口,并将它激活。 
			HANDLE handle = ::GetProp(hWndPrev,_TEXT("test11"));
			
			if((HANDLE)1 == handle) 
			{
				//如果主窗口已最小化,则恢复其大小。 
				if (::IsIconic(hWndPrev))  
					::ShowWindow(hWndPrev,SW_RESTORE);

				//将应用程序的主窗口激活。
				::SetForegroundWindow(hWndPrev);
				return FALSE;                      //退出实例。
			}

			//继续寻找下一个窗口。
			hWndPrev = ::GetWindow(hWndPrev,GW_HWNDNEXT);
		}                    

		//关闭进程互斥体
		CloseHandle(m_hMutex);
		m_hMutex = NULL;
		return FALSE;
	}


 当然 ,你还应该在你程序的OnInitDialog()函数中加上 

::SetProp(this->m_hWnd,_TEXT("test11"),(HANDLE)1);并且在对话框销毁的时候RemoveProp()删除属性值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值