![为什么 AutoHotKey 会以某种方式导致出现一堆错误消息并一直困扰着我,直到我重新启动机器?](https://linux22.com/image/1612966/%E4%B8%BA%E4%BB%80%E4%B9%88%20AutoHotKey%20%E4%BC%9A%E4%BB%A5%E6%9F%90%E7%A7%8D%E6%96%B9%E5%BC%8F%E5%AF%BC%E8%87%B4%E5%87%BA%E7%8E%B0%E4%B8%80%E5%A0%86%E9%94%99%E8%AF%AF%E6%B6%88%E6%81%AF%E5%B9%B6%E4%B8%80%E7%9B%B4%E5%9B%B0%E6%89%B0%E7%9D%80%E6%88%91%EF%BC%8C%E7%9B%B4%E5%88%B0%E6%88%91%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%9C%BA%E5%99%A8%EF%BC%9F.png)
我的 test.ahk 中有这个:
#§::
SetTitleMatchMode, 1
WinActivate,Testwindow goes here
return
它应该让我按温键 + §(键盘上“1”左边的键)在 Windows 10 上立即调出以“Testwindow goes here”开头的窗口(只有一个)。有问题的窗口是一个 PHP CLI 脚本,因此使用 cmd.exe。
事实确实如此。一次!
如果再次按下它,系统就会进入“恐怖模式”,每隔几秒钟,无论我做什么,它都会吐出多个相同的 GUI 错误框,让人无法继续使用计算机:
---------------------------
cmd.exe - Application Error
---------------------------
The application was unable to start correctly (0xc0000142). Click OK to close the application.
---------------------------
OK
---------------------------
我试过关闭 .ahk 脚本,关闭相关窗口,关闭一堆其他进程等。无论我做什么,它都会不断向我发送那些毫无意义的错误消息,直到我重新启动计算机。在尝试调试此问题时,我已经多次这样做了,这绝对是一件麻烦事,因为我每次都必须输入很长的解密密码。在确定这是正确的代码之前,我不会重新启动或再次尝试与此相关的任何操作!
我拥有的东西可能有什么问题?为什么它有效一次?
我必须说,无论哪一部分,我都觉得 AutoHotKey 手册极其混乱和晦涩难懂。我曾经与 AHK 打过交道,但每次都花费我无数个小时阅读、搜索、询问等等,而我本应该只花几秒钟在手册的正确位置查找,然后立即知道该怎么做。
答案1
我所拥有的东西可能存在什么问题?
理论上,您提供的代码应该没有任何问题(如所示)。每次都应该能毫无问题地打开相应的窗口。
关于您收到的弹出窗口,需要明确的是,这是一个非常常见的 Windows 错误。
常规故障排除建议
猜测一下,您遇到的问题与设置有关。以下是一些需要考虑的想法:
确定自动热键已是最新- 如果 AutoHotkey 本身存在问题(错误),这可能会解决问题。
从桌面测试- 如果您打开了第三方应用程序窗口,这可能会干扰 AutoHotkey 脚本。测试前请左键单击您的桌面。
使用
.ahk
其本身提供的代码 1 – 也就是说,如果这是较大脚本的一部分,则.ahk
脚本的其他部分可能导致了问题。尝试不同的热键 1 - 这可能§ 引发问题,具体取决于键盘。还可能存在一个问题,即(以某种方式)Win+§触发了另一个程序或功能。
尝试不同的 PHP 脚本 2 - 本答案末尾提供了一个简单的示例脚本,该脚本(据说)不会引起所描述的问题。
更改窗口名称/启动- 使用类似的东西
start "Test" php script.php
并查找例如Test
。WinActivate
这是不太可能的,但是......禁用电脑上的第三方软件- 防病毒程序或任何可能在后台运行的程序都可能导致您收到的错误,与 AutoHotkey 无关。
1 例如 alternative_test.ahk
#f4::
SetTitleMatchMode , 1
WinActivate , Administrator: C:\Windows\system32\cmd.exe
Return
2 例如 test.php
<?php
$x = 0;
echo "\n";
echo "This PHP program will loop 10 times or until 10 is entered at the prompt.\n";
while($x <= 10) {
echo "\n";
echo "Please enter a value from 1 to 10: \n";
$handle = fopen ("php://stdin","r");
$line = fgets($handle);
if(trim($line) == '10'){
echo "\n";
echo "You entered 10. Aborting loop!\n";
exit;
}
fclose($handle);
echo "\n";
if ($x == 10){
echo "X value has reached 10. Finishing loop!\n";
} else {
echo "Thank you, continuing...\n";
echo "\n";
echo "The current loop number is: $x";
echo "\n";
}
$x+=1;
}
?>