當我做GetWindowPlacement
時,WINDOWPLACEMENT::showCmd
似乎總是1,這是SW_SHOWNORMAL
。WINDOWPLACEMENT的showCmd ...總是1?
有誰知道這是爲什麼,如果它被更新?有誰知道這個變量是由應用程序本身還是由操作系統維護的?
我在Windows 7
我用這作爲this thread提到的達到同樣的目的運行這樣的:我試圖撤消不存儲在隱藏的窗口以前顯示隱藏的窗口內存(隱藏/顯示將在不同的運行會話中調用)或磁盤上。
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;
}
}
輸出,我躲在hwnd#00060CD0
後做(NOTEPAD.EXE的PID)一個例子:
003D0642
BEFORE: 0
AFTER: 1
000B0682
BEFORE: 0
AFTER: 1
00060CD0
BEFORE: 0
AFTER: 1
我試圖用GetWindowPlacement
區分總是隱藏的窗戶和窗戶之前已經顯示過。即使對於始終隱藏的窗戶,它似乎從不爲0。
在嘗試使用結果之前,您應該始終檢查OS調用的結果。但主要問題由@Ken描述 – Luis
將隱藏/顯示狀態存儲在自定義屬性中。 –