|
我是在B程序等初始化时,增加以下代码,让它只运行一个实例。并在找到先前的实例后,激活先前实例,关闭本次实例。但是用了以下注释的所有方法都没能成功,貌视用:::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 800, 480, SWP_SHOWWINDOW);
// ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 800, 480, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
还能将B程序激活,但不确定,只是看到一个窗口放大又缩小。却始终被A挡住。
HANDLE hEvent;
HWND hwnd;
WCHAR className[100];
::GetClassName(this->m_hWnd,className,100);
hEvent = CreateEvent(NULL,TRUE,FALSE,_T("setting"));
if(NULL != hEvent)
{
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
Sleep(10);
hwnd = ::FindWindow(className,NULL);
if(hwnd != NULL)
{
// if(0 == ::SetForegroundWindow((HWND)(((ULONG) hwnd) | 0x01) ))
// {
// MessageBox(_T("窗口激活失败"));
// }
// ::ShowWindow(hwnd,SW_SHOWMAXIMIZED);
// ::SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 800, 480, SWP_SHOWWINDOW);
// ::SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 800, 480, SWP_NOMOVE|SWP_NOSIZE|SWP_SHOWWINDOW);
// ::SetForegroundWindow((HWND)(((ULONG) hwnd) | 0x01) );
// ::SetActiveWindow(hwnd);
// ::SetWindowPos(hwnd, HWND_TOP, 0, 0, 800, 480, SWP_SHOWWINDOW | SWP_NOREPOSITION | SWP_NOOWNERZORDER);
::BringWindowToTop(hwnd);
CloseHandle(hEvent);
DestroyWindow();
}
}
}
91program
隐藏A,显示B
由于A是系统启动时一并启动的,感觉有点像mobile手机上的桌面程序一样。似乎隐藏它不太好。而且,在什么时候隐藏什么时候显示也是个问题。
因为不光只有ABC的,而且,B对话框里也有像A一样能通过createprocess启动其它程序如“播放器”之类的窗口D,挡在AB之上,这样子的话,如果有来电时,A叫出来的C对话框,就在ABD之上。然后,通话结束后,本应该是ABD这样的顺序,却变成BDA。
|
|