是否可以发送 WM_COPY 消息来复制剪贴板以外的其他地方的文本?

Joh*_*ith 2 .net c# winapi sendmessage

这是方法定义:

  [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int msg, IntPtr lparam, IntPtr wparam);
Run Code Online (Sandbox Code Playgroud)

这是对 SendMessage 的调用:

 //WM_COPY = 0x0301
 SendMessage(handle, WM_COPY, IntPtr.Zero, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

这是我检索数据的方式:

string text = System.Windows.Forms.Clipboard.GetText();
Run Code Online (Sandbox Code Playgroud)

我想做同样的事情,只是我不想将数据复制到剪贴板。是否可以将数据复制到内存中的其他部分?如果是这样,如何?

Ale*_*kov 5

不可以。您无法控制其他应用程序在收到消息时将执行的操作。您将获得目标窗口对该消息的任何行为,而没有其他任何行为(除非您也控制目标,否则您可以自己处理它)。

WM_COPY只是一条消息(它也是标准消息,以特定方式处理是有意义的)-有些窗口会处理它,有些则不会。正如 MSDN 上所定义的,WM_COPY将保存文本以进行编辑控制。

应用程序将 WM_COPY 消息发送到编辑控件或组合框,以将当前选择以 CF_TEXT 格式复制到剪贴板。

如果您正在实现自己的处理 WM_COPY 的应用程序,您可以将数据复制到任何您想要的地方,而且如果子类化编辑控件,保留默认行为会很有意义......