1

現時点では、「自動非表示」に設定されているタスクバーが画面に表示されているかどうかを C++/Qt で検出する必要があります。私はすでに次の解決策を試しましたが、残念ながら成功しませんでした:

  1. uState = (UINT) SHAppBarMessage(ABM_GETSTATE, pabd) で自動非表示の状態を確認しました。これは、自動非表示プロパティが設定されているかどうかのみを返します

  2. SystemParametersInfo(SPI_GETWORKAREA, 0, &rectWorkArea, 0); でワークエリアを取得する 残念ながら、タスクバーが「自動非表示」に設定されている場合、実際に画面に表示されていても、作業領域は常に画面全体のサイズになります。

  3. SHAppBarMessage(ABM_GETTASKBARPOS, &abd); で AppBarData を取得する この関数を使用すると、タスクバーのサイズと座標の両方を取得できますが、タスクバーが非表示であっても、タスクバーが表示されているかのように常に返されます。

したがって、これらの方法では、「自動非表示」がオンになっているタスクバーが特定の瞬間に画面に表示されるかどうかはわかりません:-(

助けていただければ幸いです:-)

4

1 に答える 1

7
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null);
bool isVisible = IsWindowVisible(hTaskbarWnd);

また

bool IsTaskbarWndVisible() {
HWND hTaskbarWnd = FindWindow("Shell_TrayWnd", null);
HMONITOR hMonitor = MonitorFromWindow(hTaskbarWnd , MONITOR_DEFAULTTONEAREST);
MONITORINFO info = { sizeof(MONITORINFO) };
if (GetMonitorInfo(hMonitor, &info))
{
  RECT rect;
  GetWindowRect(hTaskbarWnd , &rect);
  if ((rect.top >= info.rcMonitor.bottom - 4) ||
      (rect.right <= 2) ||
      (rect.bottom <= 4) ||
      (rect.left >= info.rcMonitor.right - 2))
  return false;

  return true;
}
于 2012-04-10T10:38:56.453 に答える