在应用程序外捕获WM_PASTE

时间:2015-02-10 11:26:56

标签: c# clipboard paste windows-messages

如果我从剪贴板粘贴到我自己以外的应用程序,我正在尝试捕获WM_PASTE消息,但它永远不会触发。有没有办法做到这一点,还是我坚持使用键盘钩?

相关守则:

//--dllImport
    [DllImport("user32.dll")]
    static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);

    [DllImport("user32.dll")]
    static extern IntPtr GetClipboardViewer();

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext);

    [DllImport("user32.dll", SetLastError = true)]
    static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

    IntPtr hWndNextWindow;

    //--Variables


    //--ClipboardHandler
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case (0x0001): // WM_CREATE
                hWndNextWindow = SetClipboardViewer(this.Handle);
                break;
            case (0x0002): // WM_DESTROY
                ChangeClipboardChain(this.Handle, hWndNextWindow);
                break;
            case (0x030D): // WM_CHANGECBCHAIN
                if (m.WParam == hWndNextWindow)
                    hWndNextWindow = m.LParam;
                else if (hWndNextWindow != IntPtr.Zero)
                    SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam);
                break;
            case (0x0308): // WM_DRAWCLIPBOARD
                {
                    //DoStuff
                }
                SendMessage(hWndNextWindow, m.Msg, m.WParam, m.LParam);
                break;


            //WM_PASTE
            case (0x0302):
                //DEBUG
                MessageBox.Show("PASTE");
                break;


        }

        base.WndProc(ref m);
    }

0 个答案:

没有答案