我有使用 Sendkeys.send 将文本发送到其他应用程序的 C# 应用程序。一段时间后在 Windows 7 上执行时,Sendkeys 停止响应并且不发送任何文本。它永远不会发生在 Windows XP 上。我怀疑是杀毒软件,但是当我在没有杀毒软件的情况下运行时也会发生这种情况。有什么想法会导致它吗?感谢您的帮助。
2 回答
您正在针对哪个版本的 .NET Framework 进行编译?如果您仍在使用 2.0 之前的版本,您很可能在 Windows 7 中遇到由于 UAC 增强的安全模型而导致的兼容性问题。
该SendKeys.Send
方法已在 Framework 3.0 版中进行了更新,以便在 Windows Vista 和更新版本中正常工作。请参阅文档:
SendKeys 类已针对 .NET Framework 3.0 进行了更新,以使其能够在 Windows Vista 上运行的应用程序中使用。Windows Vista 的增强安全性(称为用户帐户控制或 UAC)会阻止以前的实现按预期工作。
您需要升级;3.5 版已包含在 Windows 7 中。
否则,如果您需要将数据发送到其他应用程序,则可以选择P/Invoking Windows API 公开的SendMessage
函数。检查pinvoke.net以获取您需要在 C# 中调用它的声明。
该方法的 MSDN 文档中SendKeys.Send
有一个(至少对我而言)相当奇怪的评论:
警告
如果您的应用程序旨在用于各种键盘的国际使用,则使用 Send 可能会产生不可预知的结果,应避免使用。
我不明白该声明的原因,但也许这是您所经历的行为的(一个)原因?
在同一 MSDN 页面的最底部,他们进一步指出:
...SendKeys 类容易受到一些开发人员不得不解决的时间问题的影响。更新后的实现仍然容易受到时间问题的影响,但速度稍快一些,并且可能需要更改解决方法......
在我看来,这SendKey
是在任何情况下都应避免的功能。