0

get を実行すると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;
  }
}

非表示にした後に実行した 1 つの例 (notepad.exe の pid) の出力hwnd#00060CD0:

003D0642
BEFORE: 0
AFTER: 1
000B0682
BEFORE: 0
AFTER: 1
00060CD0
BEFORE: 0
AFTER: 1

GetWindowPlacement常に非表示になっているウィンドウと以前に表示されていたウィンドウを区別するために使用しようとしています。常に非表示になっているウィンドウでも、0 になることはないようです。

4

1 に答える 1

4

showCmdafter callingの可能な値は 3 つだけですGetWindowPlacement

MSDNのドキュメントからGetWindowPlacement強調鉱山):

この関数によって取得される WINDOWPLACEMENT の flags メンバーは、常にゼロです。hWnd パラメーターで識別されるウィンドウが最大化されている場合、showCmd メンバーは SW_SHOWMAXIMIZED です。ウィンドウが最小化されている場合、showCmd は SW_SHOWMINIMIZED です。それ以外の場合は、SW_SHOWNORMAL です。

したがって、配置情報を求めているウィンドウは、呼び出し時に最大化または最小化以外の状態になっているようですGetWindowPlacement

あなたが実際に探しているのはIsWindowVisible.

于 2013-06-05T17:24:32.627 に答える