为什么Visual Studio在autohotkey之前捕获关键事件?

问题描述:

我最近切换到Dvorak键盘布局作为一点实验。转型中最困难的部分之一就是处理热键。大多数热键在设计时都考虑到了QWERTY,而且更糟的是,热键似乎是极其紧张的记忆。为什么Visual Studio在autohotkey之前捕获关键事件?

而不是重新学习所有的热键,当与其他键一起按下了Ctrl键Alt键,或钥匙我已经写了一个AutoHotkey的脚本Dvorak布局转换回QWERTY 。除了Visual Studio '08之外,它在我尝试过的任何地方都可以很好地工作。在autohotkey可以翻译它们之前,似乎击键被捕获。

为什么会发生这种情况,我该如何解决这个问题?

下面是我的脚本的摘录(从一开始):

; control + letter 
^;::^z 
^q::^x 
^j::^c 
^k::^v 

更新:脚本工作正常Win7上用AHK,VS08和的CodeRush新安装。我遇到麻烦的机器正在运行vista。有关如何进一步诊断的任何想法?

更新2:该脚本可以在Vista和2010 beta 2中正常运行。似乎只是08 vs vista。今晚要尝试新版vs08。

啊哈!我已经知道了。如果ahk和目标应用程序没有在相同权限(或用户)下运行,ahk将不会正确拦截/模拟键盘事件。在我的情况下,visual studio以管理员(提升)特权运行,而ahk脚本以当前登录的用户身份运行。

以下解决的问题之一:

  • 同时运行VS和AHK作为当前用户
  • 编译脚本和VS同时运行和编译应用程序作为管理员
+3

作为管理员编译和运行完美! – MEMark 2010-06-09 02:59:49

+12

只是想补充说,它不是关于*不同*权限,而是一个AutoHotkey脚本不能用于运行在*更高*特权级别的应用程序 – 2012-10-25 14:24:02

+1

您可以将“以管理员身份运行”添加到ahk的上下文菜单中,它可以节省编译步骤。http://www.howtogeek.com/howto/windows-vista/add-run -as管理员换的AutoHotkey的脚本功能于Windows的Vista中/ – 2012-12-27 20:21:52

这句话在small print听起来相关:

如果SENDMODE在自动执行段(脚本的顶部)时,它会影响所有的重新映射。但是,由于重新映射使用Send {Blind}并且由于SendPlay模式不完全支持{Blind},所以在SendPlay模式下(尤其是Control,Shift,Alt和Win)可能无法正确运行某些重新映射。要解决此问题,请在重新映射时避免在自动执行部分中使用SendPlay;然后在脚本的其他位置使用SendPlay与Send命令。或者,您可以将您的重新映射转换为显式调用SendEvent与发送的热键(如下所述)。

+0

实际上把脚本在四种“发送”模式中的任何一种都没有帮助。 :( – 2009-12-12 17:25:51

刚想要添加几个点到OP本身找到的解决方案。

1)问题不在于AHK和VS与不同权限运行 - 它只是一个脚本创建热键在非管理员模式下运行不会对在管理运行的应用程序工作模式,但如果反过来则不会有问题。

2)不需要编译脚本,只需将autohotkey.exe设置为在管理模式下运行(这就是我所做的),或者为特定脚本创建快捷方式并将其设置为始终运行管理员模式。 (顺便说一句,只是要指出,运行AHK脚本的编译版本没有性能增益,因为代码仍然被解释 - 它只是现在解释器被嵌入在可执行文件中创建)