WINDOWPLACEMENT的展示Cmd...总是 1?
WINDOWPLACEMENT's showCmd... always 1?
当我做一个获取GetWindowPlacement
时,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;
}
}
隐藏hwnd#00060CD0
后我所做的一个示例的输出(pid of notepad.exe):
003D0642
BEFORE: 0
AFTER: 1
000B0682
BEFORE: 0
AFTER: 1
00060CD0
BEFORE: 0
AFTER: 1
我试图使用GetWindowPlacement
来区分始终隐藏的窗口和以前显示的窗口。它似乎永远不会为0,即使是总是隐藏的窗口
调用GetWindowPlacement
后,showCmd
只有三个可能的值。
来自GetWindowPlacement
的MSDN文档(强调我的):
该函数检索到的WINDOWPLACEMENT的flags成员始终为零。如果hWnd参数标识的窗口是最大化的,则showCmd成员为SW_SHOWMAXIMIZED。如果窗口被最小化,则showCmd为SW_SHOWMINIMIZED。否则为SW_SHOWNORMAL
因此,当您调用GetWindowPlacement
时,您要求放置信息的窗口似乎处于最大化或最小化之外的状态。
我怀疑你实际上在寻找的是IsWindowVisible
。
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- QueryWorkingSet总是返回false
- 无论条件是否为true,if总是在c++中执行
- C++A*算法并不总是在路径中具有目标节点
- 为什么(-1)%vector::size()总是返回0
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 类型总是使用其大小存储在内存中吗
- 使用std::istream::peek()总是安全的吗
- OpenMP:并行更新数组总是需要减少数组吗
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 对于C++,方括号中的标题必须总是在引号中的标题之上吗
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 在线程之间拆分任务总是值得的吗?
- 在由Sublime文本3编译后在cmd上显示Java程序输出
- 为什么系统函数总是在C++中返回已转移的退出状态?
- 如何在使用Makefile构建后在cmd中运行该程序?
- WINDOWPLACEMENT的展示Cmd...总是 1?