WINDOWPLACEMENT的展示Cmd...总是 1?

WINDOWPLACEMENT's showCmd... always 1?

本文关键字:总是 Cmd WINDOWPLACEMENT      更新时间:2023-10-16

当我做一个获取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