SendMessage()复制/剪切/粘贴WM_COPYDATA 0x004A

时间:2013-02-09 06:15:33

标签: c#

我一直在浏览,我不清楚如何简单地发送Ctrl + x或Ctrl + c命令 来复制/剪切数据(字符串),但我很确定这是需要的pInvoke。快点,任何人?

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

可能伴随着这个:         [的DllImport( “USER32.DLL”)]         static extern IntPtr SetClipboardData(uint uFormat,IntPtr hMem);

不确定如何正确使用其中任何一种,请帮助。

IntPtr nextClipboardAppWindow;
public frmMain()
{
        nextClipboardAppWindow = (IntPtr)SetClipboardViewer((int)this.Handle);
}

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        // defined in winuser.h
        const int WM_DRAWCLIPBOARD = 0x308;
        const int WM_CHANGECBCHAIN = 0x030D;
        switch (m.Msg)
        {
            case WM_DRAWCLIPBOARD:
                //DisplayClipboardData();
                SendMessage(nextClipboardAppWindow, m.Msg, m.WParam,
                            m.LParam);
                break;

            case WM_CHANGECBCHAIN:
                if (m.WParam == nextClipboardAppWindow)
                    nextClipboardAppWindow = m.LParam;
                else
                    SendMessage(nextClipboardAppWindow, m.Msg, m.WParam,
                                m.LParam);
                break;

            default:
                base.WndProc(ref m);
                break;
        }
    }

1 个答案:

答案 0 :(得分:-1)

如果您使用.Net并且可以访问System.Windows.Forms,那么您可以使用Clipboard类来SetGet剪贴板数据。 以下是MSDN的链接示例。

http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

Clipboard类实际上将数据发布到系统剪贴板。它不受应用程序的约束。这很简单

System.Windows.Forms.Clipboard.SetText("This will be available across all applications");