2

这是方法定义:

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

这是对 SendMessage 的调用:

 //WM_COPY = 0x0301
 SendMessage(handle, WM_COPY, IntPtr.Zero, IntPtr.Zero);

这就是我检索数据的方式:

string text = System.Windows.Forms.Clipboard.GetText();

除了不希望将数据复制到剪贴板之外,我想做同样的事情。是否可以将数据复制到内存中的其他部分?如果是这样,怎么做?

4

2 回答 2

5

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

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

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

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

于 2012-11-26T17:10:47.450 回答
0

如果剪贴板不是一个选项,您可以将其写入文件。

于 2012-11-26T17:10:04.893 回答