【问题标题】:How can I capture window focus change event with c#如何使用 c# 捕获窗口焦点更改事件
【发布时间】:2012-10-11 08:26:08
【问题描述】:

我想构建一个应用程序来监控所有正在运行的窗口焦点更改事件。我知道 WM_KILLFOCUS (0x0008) 和 WM_SETFOCUS(0x0007) 并且当窗口失去焦点或获得焦点时,将发送消息。在 spy++ 的帮助下,我得到如下输出:

0005069A S WM_SETFOCUS hwndLoseFocus:(null)

0005069A R WM_SETFOCUS

0005069A S WM_KILLFOCUS hwndGetFocus:(null)

0005069A R WM_KILLFOCUS

00010096 S WM_SETFOCUS hwndLoseFocus:(null)

00010096 R WM_SETFOCUS

我尝试编写以下 c# 代码以使其在我的 winfrom 应用程序中工作:

[StructLayout(LayoutKind.Sequential)]
public struct NativeMessage
{
 public IntPtr handle;
 public uint msg;
 public IntPtr wParam;
 public IntPtr lParam;
 public uint time;
 public System.Drawing.Point p;
}
[DllImport("user32.dll")]
public static extern sbyte GetMessage(out NativeMessage lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);

NativeMessage msg = new NativeMessage();
        sbyte ret;
        while ((ret = GetMessage( out msg, IntPtr.Zero, 0, 0)) != -1)
        {
            if (ret == -1)
            {
                //-1 indicates an error
            }
            else
            {
                if (msg.msg == 0x0008 || msg.msg == 0x0007)
                {
                    this.textBox1.Text = "ret is: " + ret;
                }
            }
        }

不幸的是,我从未收到 WM_KILLFOCUS 和 WM_SETFOCUS 消息。

当我发现所有正在运行的窗口中都发生了获取/丢失焦点事件时,我实际上想在我的应用程序中触发一个事件。我怎样才能让它工作?

谢谢。

【问题讨论】:

  • 为什么不直接使用Form.LostFocusForm.GotFocus 事件呢?这些事件基本上是由WM_KILLFOCUSWM_SETFOCUS 触发的,它们是这些消息的windows 窗体表示形式。
  • 我认为他想监控所有正在运行的窗口(应用程序)的焦点,而不仅仅是他的应用程序,所以他不能那么容易地订阅事件。无论如何,这是我需要/选择监控获胜消息的唯一场景。
  • 洛安娜,你是对的。我想构建一个应用程序来监视所有正在运行的窗口。在我的应用程序中,我想要:a:监视所有窗口获取/丢失焦点,b:当所有窗口中发生获取/丢失焦点事件时,在我的应用程序中触发一个事件。

标签: c# events window focus


【解决方案1】:

使用Form.ActivedForm.Deactivate 事件来确定表单是丢失还是获得焦点。

【讨论】:

    【解决方案2】:

    如果你真的想进入令人讨厌的原生窗口消息世界,你应该使用WndProc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多