WPF获取窗口消息发送者

时间:2014-10-03 19:37:36

标签: c# wpf windows-messages

我有一个使用WindowInteropHelper和HwndSource处理Windows消息的WPF窗口(“A”):

WindowInteropHelper helper = new WindowInteropHelper(this);
IntPtr windowHandle = helper.Handle;

source = HwndSource.FromHwnd(windowHandle);
source.AddHook(new HwndSourceHook(WndProc));

和WndProc看起来像这样:

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    ...
    else if (msg == WM_CLOSE)
    {
        StringBuilder strbTitle = new StringBuilder(255);
        int nLength = User32.GetWindowText(hwnd, strbTitle, strbTitle.Capacity + 1); // my own method
        string strTitle = strbTitle.ToString();

        // log that I'm being shut down.
        }
     }
}

唯一的问题是“hwnd”总是返回我自己的窗口(“A”),而不是发送消息的窗口(“B”)。我如何找出发送消息的窗口?

注意:我已尝试从其他应用程序发送其他Windows消息(如移动/隐藏/显示/退出),并且我总是在“strbTitle”中获得相同的窗口名称。我已经尝试重新启动“B”并重新发送消息并且hwnd没有改变,但是如果我重新启动“A”而不是“B”那么它确实会改变(所以我很肯定hwnd是由于某种原因消息的窗口)。如果重要的话,我正在为.NET 4.0编译。

我已经做了一些搜索,但找不到任何提出这个问题的人...感谢您抽出宝贵时间来查看并帮助我!

0 个答案:

没有答案