【问题标题】:Sending Paste message to Microsoft programs not working向 Microsoft 程序发送粘贴消息不起作用
【发布时间】:2014-02-03 21:05:18
【问题描述】:

我正在尝试使用 SendMessage 方法将“粘贴”Windows 消息发送到前台窗口。它适用于大多数程序,但来自 Microsoft 的任何东西都会忽略它(尝试过 MSSQL 和各种 Office 程序)。这是我的代码:

var info = new GuiThreadInfo();
info.cbSize = Marshal.SizeOf(info);
if (!GetGUIThreadInfo(0, out info)
    throw new Win32Exception();

var focus = info.hwndFocus;
SendMessage(focus, 0x0302, IntPtr.Zero, IntPtr.Zero);

我听说微软程序使用自定义控件,但我不知道该怎么做。正如我所提到的,它在其他程序(记事本、SQL Navigator)中效果很好。

编辑:嗯,我设法使用简单的 SendKeys.SendWait 方法实现了我想要的。虽然我之前确实尝试过使用它并且它不适用于所有程序,但事实证明它是区分大小写的。我发送的是“^V”,但现在我使用的是“^v”,它可以工作了!

【问题讨论】:

  • 我以为记事本是微软出的...

标签: pinvoke paste sendmessage


【解决方案1】:

并非所有程序都会以WM_PASTE 消息的方式响应被戳。程序没有理由这样做。某些程序这样做只是一个机会问题。如果应用程序使用标准的窗口编辑控件,那么您可能会成功。但是许多 GUI 框架没有单独的窗口控件,只是忽略您发送的消息。

您应该使用受支持的方式来自动化其他程序 UIAutomation,而不是采用您的方法。

【讨论】:

  • 你还在苦苦挣扎吗?您还需要回答您提出的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多