0

在 Google Chrome 中,您可以通过简单地打开对话框并在对话框上执行 CTRL-C 来检索 JavaScript 警报/对话框的文本。这会将对话框中的文本放入剪贴板。

我正在尝试使用SendMessage发送 CTRL-C 以对 JavaScript 对话框的文本执行复制。我已经设法使用 SendInput 做到这一点,但不幸的是,如果窗口没有焦点,这可能会失败。

我曾尝试将 SendMessage 与 WM_COPY 消息一起使用,但这并不能满足我的需要。

请如果有人在成功使用 SendMessage 之前完成此操作,我将非常感谢您的帮助。

4

4 回答 4

1

如果 WM_COPY 失败,您可以尝试一些方法...

要伪造按键,您可以发送 WM_KEYDOWN 和 WM_KEYUP 消息。

但是,您在消息中发送了什么?如果您发送一个“c”,那么您无法在这些消息中通知应用程序 ctrl 也被按住。

您可以发送一个字符 0x03(这是 ctrl+c 实际生成的字符代码),但不能保证接收应用程序会将其解释为“ctrl+c”操作。

为什么它可能不起作用?接收应用程序可能...

  • 忽略 WM_KEYDOWN 和 WM_KEYUP 并使用其他方式读取键盘(例如 GetAsyncKeyState 以查看某个键是否按下)
  • 处理 WM_KEYDOWN 和/或 WM_KEYUP 消息,但查找“c”,然后使用 GetAsyncKeyState() 或类似方法来检测处理消息时 ctrl 是否关闭。
  • 如果它没有输入焦点,它可能仍然会忽略这些消息,或者更糟的是,处理这些消息,就好像它们是通过输入焦点窗口接收的一样。

所以 - 试一试,但它可能不起作用。

或者,如果 SendInput 有效,那么您可以将输入焦点强制到正确的控件 SendInput,然后将输入焦点恢复到其先前的位置。

另一种方法(可能是最好的方法)是,如果它是您已知的对话框并且它包含静态文本字段,您可能只能在其上找到该子控件和 GetText(发送 WM_GETTEXT 消息),并避免使用剪贴板一点也不。(或者,如果您需要剪贴板上的文本,请像这样获取它,然后自己将其放在剪贴板上)。这将避免欺骗应用程序提供文本,并回退到标准的 Windows 行为。

于 2010-04-01T21:32:05.900 回答
0

尝试使用这些

WM_CUT = 0x300
WM_COPY = 0x301
WM_PASTE = 0x302
WM_CLEAR = 0x303

作为 wmsg 参数,具体取决于您的操作。

于 2010-04-01T21:11:05.620 回答
0

由于问题有点模糊,您是在谈论发送 Ctrl+C 击键以终止进程,还是将选择复制到剪贴板。如果是前者,请在此处此处的 SO 上查看此答案,这是在以前的场合被问到的,其中 OP 询问如何将 Ctrl+C 击键发送到 shell 进程以终止它。

如果您正在谈论 Ctrl+C 将选择复制到剪贴板,那么在复制到剪贴板之前是否确实首先选择了选择就更加棘手了......

如果我偏离了错误的角度,至少,请编辑您的问题以使其更清晰!

于 2010-04-01T21:12:48.933 回答
-1

我意识到这是一个古老的问题,但鉴于它没有得到令人满意的回答,请允许我为其他任何人提供帮助:

SendMessage()不需要。只需使用:

System.Windows.Forms.SendKeys.SendWait("^(c)");

如果你想粘贴:

System.Windows.Forms.SendKeys.SendWait("^(v)");
于 2016-03-21T15:57:26.867 回答