当我执行 getGetWindowPlacement
时,WINDOWPLACEMENT::showCmd
似乎总是 1,即SW_SHOWNORMAL
.
有谁知道为什么会这样以及是否已更新?有谁知道这个变量是由应用程序本身还是由操作系统维护的?
我在 Windows 7 上运行它。
我正在使用它来实现与该线程中提到的相同目的:我正在尝试撤消先前显示的隐藏窗口,而不将隐藏窗口存储在内存中(隐藏/显示将在不同的运行会话中调用)或磁盘上。
void hide(const unsigned int pid){
std::list<HWND> windowList = getWindowbyPID(pid);
for(std::list<HWND>::iterator it = windowList.begin(); it != windowList.end(); it++){
if(IsWindowVisible(*it)){ std::cout << "Hid WIN#" << *it << std::endl; ShowWindow(*it,SW_HIDE); }
}
}
void show(const unsigned int pid){
std::list<HWND> windowList = getWindowbyPID(pid);
for(std::list<HWND>::iterator it = windowList.begin(); it != windowList.end(); it++){
//if(IsWindowVisible(*it)){ ShowWindow(*it,SW_SHOW); }
WINDOWPLACEMENT wp;
wp.length = sizeof(wp);
wp.showCmd = 0; // Just to clear showCmd before reading.
std::cout << *it << std::endl;
std::cout << "BEFORE: " << wp.showCmd << std::endl;
GetWindowPlacement(*it,&wp);
std::cout << "AFTER: " << wp.showCmd << std::endl;
}
}
隐藏后我所做的一个示例的输出(notepad.exe 的 pid)hwnd#00060CD0
:
003D0642
BEFORE: 0
AFTER: 1
000B0682
BEFORE: 0
AFTER: 1
00060CD0
BEFORE: 0
AFTER: 1
我试图用来GetWindowPlacement
区分总是隐藏的窗口和以前显示的窗口。即使对于始终隐藏的窗口,它似乎也永远不会为 0。