我正在使用Mutex将我的应用程序限制为仅一个实例。这是代码:
HANDLE hMutex;
hMutex = CreateMutex(NULL, FALSE, "MyTestApp");
if(hMutex == NULL)
ShowMessage(GetLastError());
else
if(GetLastError() == ERROR_ALREADY_EXISTS) {
ShowMessage("Application already running!");
// activate already running instance ?!
return -1;
}
我想扩展它以激活已经运行的实例。怎么做?感谢。
答案 0 :(得分:1)
假设它是Win32应用程序:
1)使用FindWindow
函数和您提供的窗口名称及其类名。
2)使用SetForegroundWindow
并返回HWND FindWindow
。
答案 1 :(得分:0)
一旦确定没有其他应用程序实例正在运行,请重载主表单的WndProc处理唯一消息(例如,如const unsigned int myMsgId = WM_USER + 100;
),或者您可以使用RegisterWindowMessage。当应用程序的第二个实例启动时,在创建主窗体之前广播带有该消息标识符PostMessage(NULL, myMsgId, 0, 0)
的消息并退出。应用程序的第一个实例可以对它做出反应并使用BringWindowToTop将自己置于前台(如果可能,vista及以上版本不允许出于显而易见的原因)。如果不允许将应用程序置于前台,应用程序的状态栏图标将开始闪烁以引起用户注意。
萨姆