如何防止窗口被停用?

时间:2011-02-28 13:21:07

标签: c++ windows winapi focus activation

有没有办法防止窗口被停用?窗口处于不同的过程,然后是我的。

这适用于Windows。

2 个答案:

答案 0 :(得分:3)

这样做可能很危险,但解决方案是处理WM_ACTIVATE消息并检查wParam是否为WA_INACTIVE。这意味着窗口已停用。发生这种情况时,您可以重新激活它。

为了在另一个进程的窗口中执行此操作,您需要使用SetWindowsHookEx安装消息挂钩。

然而,另一个应用程序可能会做同样的事情,将彼此置于激活/停用的无限循环中。

这也是本来不应该在个人计算机上运行的软件。

答案 1 :(得分:0)

你可以像这样陷阱WM_ACTIVATEAPP

protected override void WndProc(ref Message m) {
  // Trap WM_ACTIVATEAPP
  if ((m.Msg == 0x1c) && (m.WParam == IntPtr.Zero))
  {
     // If WM_ACTIVATEAPP and WParam is deactivated, return
     return;
  }
  base.WndProc(ref m);
}