使用C#在Windows XP上发送奇怪的行为

时间:2012-04-13 07:09:07

标签: c# windows-xp sendkeys

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

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

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

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

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

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

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

    这是代码

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

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

1 个答案:

答案 0 :(得分:2)

我建议切换到使用SendWait方法:

  

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

(强调补充)

目前,您有一个竞争条件,在尝试读取剪贴板内容之前,无法保证其他应用程序已处理了CTRL-C。有时你得到较旧的内容并不奇怪。

(插入关于SendKeys的常见警告是自动化其他应用程序的可怕方式,请考虑使用automation API代替,并避免践踏剪贴板,除非必要)