在主程序上添加了调用另一个辅助工具程序的按钮,每按一次都会打开一个新的辅助工具程序实例,这样看起立很别扭。舒服一些的作法应该是:在已经打开一个程序实例的情况下,激活这个实例;在没有已打开实例的情况下,创建一个新实例。创建新实例很简单,就不多说了。这里说一下激活已存在的程序实例的方法。
//回调函数,被传送给EnumWIndows做参数
BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam)
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
//进程ID相符
if(lParam == dwPID)
{
HWND hSubWnd = ::GetLastActivePopup(hWnd);
::ShowWindow(hWnd, SW_SHOW);
::SetForegroundWindow(hSubWnd);
return FALSE;
}
else
{
return TRUE;
}
}
//调用该函数激活另一个程序实例,参数为另一个程序的进程ID,这个进程ID在创建进程时获得。
BOOL ActivateProcess(DWORD dwProcessID)
{
return EnumWindows(EnumWindowProc, (LPARAM)dwProcessID);
}
在创建子进程时,注意保留其进程ID,当需要激活该进程时,调用ActivateProcess函数,将进程ID做参数传递过去,就可以激活该子进程了。效果就是子进程的窗口啪的一下跳到了最前面,很无聊吧?