使Wndproc事件与WPF一起工作

本文关键字:一起 工作 WPF Wndproc 事件 | 更新日期: 2023-09-27 18:29:58

我目前正试图在wpf中获得wndproc处理,但没有成功。。

我需要获取创建窗口、激活窗口和销毁窗口事件的事件。

这是我迄今为止尝试的

 int uMsgNotify;
    public MainWindow()
    {
        InitializeComponent();
        WinApi.SetTaskmanWindow(new WindowInteropHelper(this).Handle);
        WinApi.RegisterShellHookWindow(new WindowInteropHelper(this).Handle);
        uMsgNotify = WinApi.RegisterWindowMessage("SHELLHOOK");
        MainForm.ShowInTaskbar = false;
        MainForm.ShowActivated = true;   
    }
    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
        source.AddHook(WndProc);
    }
    private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
    {
        IntPtr handle;
        if (msg == uMsgNotify)
        {
            switch (wParam.ToInt32())
            {
                case WinApi.HSHELL_WINDOWCREATED:
                    handle = lParam;
                    string windowName = GetWindowName(handle);
                    IntPtr hWnd = WinApi.FindWindow(null, windowName);
                    add_icon(windowName, handle);// add new task's icon in taskbar
                    break;
                case WinApi.HSHELL_WINDOWACTIVATED:
                    handle = lParam;
                    break;
                case WinApi.HSHELL_WINDOWDESTROYED:
                    handle = lParam;
                    del_icon(handle); //remove icon from taskbar
                    break;
            }
        }
        return IntPtr.Zero;
    }
    private static string GetWindowName(IntPtr hWnd)
    {
        // Allocate correct string length first
        int length = WinApi.GetWindowTextLength(hWnd);
        StringBuilder sb = new StringBuilder(length + 1);
        WinApi.GetWindowText(hWnd, sb, sb.Capacity);
        return sb.ToString();
    }

代码不会给出任何类型的运行时错误。。。。但是它不起作用。。为了更有意义,我正在为我的游戏咖啡馆开发一个windows的替代外壳。。。它需要有一种任务栏。。

有什么帮助吗?

使Wndproc事件与WPF一起工作

我不知道你是否还需要它,但是:如果你使用ShowInTaskbar = false,它将无法用WndProc捕获任何消息。