0

我在我的一个程序 (C#) 中使用 SendKeys,当用户在键盘上按 F8 时,它会复制选定的文本。

它在 Windows 7 上运行良好,但在 Windows XP 上它有以下问题。

  1. 假设在记事本上,下面的句子写着“这是测试”

  2. 如果用户选择“is”并按 F8,则不会复制文本。

  3. 之后,如果用户选择“This”,则复制的文本为“is”

  4. 之后,如果用户选择“test”,则复制的文本为“This”

如您所见,按 F8 会复制先前选择的文本,而不是当前文本。它只发生在 Windows XP 上。

这是代码

System.IntPtr test = GetForegroundWindow();
System.Windows.Forms.SendKeys.Send("^(c)");
string copiedText = Clipboard.GetText();

由于我使用 F8 的全局键绑定,因此第一行代码告诉我当前活动的窗口。之后发送 Ctrl+C,然后从剪贴板复制文本。

4

1 回答 1

2

我建议改用以下SendWait方法:

使用 SendWait 将击键或击键组合发送到活动应用程序并等待处理击键消息。

(重点补充)

目前,您有一个竞争条件,不能保证其他应用程序在您尝试读取剪贴板内容之前已经处理了 CTRL-C。有时您会获得较旧的内容也就不足为奇了。

SendKeys(插入关于自动化其他应用程序的可怕方式的常见警告,考虑改用自动化 API,除非必要,否则避免在剪贴板上踩踏)

于 2012-04-13T07:22:15.683 回答