我在我的一个程序(C#)中使用SendKeys,当用户在键盘上按下F8时,它会复制所选文本。
它在Windows 7上运行良好,但在Windows XP上它有以下问题。
假设在记事本上,下面的句子写成“这是测试”
如果用户选择“是”并按F8,则不会复制文本。
之后如果用户选择“This”,则复制的文本为“is”
之后如果用户选择“test”,则复制的文本为“This”
如您所见,按F8可复制以前选择的文本,而不是当前文本。它只发生在Windows XP上。
这是代码
System.IntPtr test = GetForegroundWindow();
System.Windows.Forms.SendKeys.Send("^(c)");
string copiedText = Clipboard.GetText();
由于我使用F8的全局键绑定,因此第一行代码告诉我当前活动的窗口。然后发送Ctrl + C,然后从剪贴板复制文本。
答案 0 :(得分:2)
我建议切换到使用SendWait
方法:
使用SendWait将键击或键击组合发送到活动应用程序,等待处理击键消息。
(强调补充)
目前,您有一个竞争条件,在尝试读取剪贴板内容之前,无法保证其他应用程序已处理了CTRL-C。有时你得到较旧的内容并不奇怪。
(插入关于SendKeys
的常见警告是自动化其他应用程序的可怕方式,请考虑使用automation API代替,并避免践踏剪贴板,除非必要)