3

有没有办法确定桌面是否有前景窗口?

这有效,但似乎不正确?当我的桌面句柄上没有前景窗口时,返回 328992。

Handle := GetForegroundWindow;
if Handle = 328992 then
begin
  MessageBox(0, 'There is no active window.', 'No Active Window',   MB_ICONWARNING or MB_OK);
  exit;
end;

实现这一目标的最佳方法是什么?德尔福 2010

跟进:

iDesktopWindow := GetDesktopWindow;
iShellWindow := GetShellWindow;
iForegroundWindow := GetForegroundWindow;
ShowMessage('DesktopWindow: ' + IntToStr(iDesktopWindow));
ShowMessage('ShellWindow: ' + IntToStr(iShellWindow));
ShowMessage('ForegroundWindow: ' + IntToStr(iForegroundWindow));

DesktopWindow 返回 65552 ShellWindow 返回 65864 ForegroundWindow 返回 65724

每次运行应用程序时,我之前的编辑都会为 ForegroundWindow 显示不同的值,但我未能在获得该值之前最小化应用程序。现在我每次都为 ForegroundWindow 获得一致的值 65724。在这种情况下,没有活动窗口……只有桌面和最小化的窗口。

4

1 回答 1

2

总有一个前景窗口。GetForegroundWindow好吧,当前景窗口在返回时被更改时,有些瞬间NULL,但这些瞬间很快就过去了!

我希望这328992是用于显示桌面的窗口之一的窗口句柄。使用 Spy++ 或类似工具来确定它是哪个窗口。我的猜测是,您尝试检测的状态是外壳窗口是前景窗口。

function GetShellWindow: HWND; stdcall external 'user32.dll';

function IsShellWindowTheForegroundWindow: Boolean;
begin
  Result := GetShellWindow=GetForegroundWindow;
end;
于 2012-08-27T14:50:29.547 回答