89

我最近切换到 Dvorak 键盘布局作为一个实验。过渡中最困难的部分之一是处理热键。大多数热键在设计时都考虑到了 QWERTY,更糟糕的是,热键似乎受到肌肉记忆的极大限制。

我没有重新学习所有热键,而是编写了一个自动热键脚本,当 、 或 键与其他键一起按下时,将 Dvorak 布局转换CtrlAltQWERTY Win。除了 Visual Studio '08 之外,它在我尝试过的任何地方都运行良好。似乎在自动热键可以翻译它们之前就已经捕获了击键。

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

以下是我的脚本的摘录(从头开始):

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

更新:该脚本在新安装了 ahk、vs08 和 coderush 的 Win7 上运行良好。我遇到问题的机器正在运行 vista。关于如何进一步诊断的任何想法?

更新 2:该脚本适用于 Vista 和 2010 beta 2。似乎仅适用于 vs 08 + vista。今晚将尝试全新安装 vs08。

4

4 回答 4

186

啊哈!我已经想通了。如果 ahk 和目标应用程序没有在相同的权限(或用户)下运行,ahk 将无法正确拦截/模拟键盘事件。就我而言,Visual Studio 以管理员(提升)权限运行,而 ahk 脚本以当前登录用户身份运行。

以下任一方法解决了该问题:

  • 以当前用户身份同时运行 vs 和 ahk
  • 编译脚本并以管理员身份运行 vs 和编译后的应用程序
于 2009-12-15T04:58:48.140 回答
51

只想为 OP 自己找到的解决方案添加几点。

1) 问题不在于 AHK 和 VS 以不同的权限运行 - 它只是由在非管理模式下运行的脚本创建的热键不适用于在管理模式下运行的应用程序,但如果它是没有问题的反过来。

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

于 2011-12-10T16:07:11.227 回答
4

这是由于称为用户界面特权隔离 (UIPI)的安全功能,它是用户帐户控制 (UAC) 的一部分。

常见问题解答中列出了几种解决方法:

如何解决由用户帐户控制 (UAC) 引起的问题?

常见的解决方法如下:

  • 在 AutoHotkey 设置中启用将“使用 UI 访问权限运行”添加到上下文菜单选项。通过从“开始”菜单重新运行 AutoHotkey 设置,无需重新安装 AutoHotkey 即可启用或禁用此选项。启用后,通过右键单击它并选择Run with UI Access来启动您的脚本文件,或者使用类似的命令行"AutoHotkeyU32_UIA.exe" "Your script.ahk"(但包括完整路径)。
  • 以管理员身份运行脚本。请注意,这也会导致脚本启动的任何程序以管理员身份运行,并且可能需要用户在启动脚本时接受批准提示。
  • 禁用本地安全策略“以管理员批准模式运行所有管理员”(不推荐)。
  • 完全禁用 UAC。不建议这样做,并且在 Windows 8 或更高版本上不可行。

我通常不建议以管理员身份运行脚本来解决此问题,因为它可能会产生意想不到或不受欢迎的副作用。例如,脚本启动的任何程序Run也将以管理员身份运行。该脚本还将对各种文件夹(例如 Program Files)拥有不必要的写入权限。一些糟糕的代码(从某处复制粘贴的恶意代码,或带有错误的代码)可能会以这种方式造成更大的损害。

当然,我也不推荐最后两个选项。只剩下Run with UI Access,可以如上所述启用和使用。

于 2018-10-13T21:46:00.383 回答
1

显然有一个解决方法。

来自文档Program.htm#Installer_uiAccess
Lexikos 的论坛主题

摘抄:

启用UIAccess

修改 AutoHotkey.exe 以允许脚本在启用 UAC 时执行以下操作:

无需以管理员身份运行脚本即可与管理程序的窗口进行交互。使用发送播放。有限制;请在使用此脚本之前阅读该帖子。

ahk 文件的下载链接在论坛上已损坏,但我在 Github 上找到了它:EnableUIAccess.ahk

于 2018-05-01T18:48:59.990 回答