为什么 AutoHotKey 会以某种方式导致出现一堆错误消息并一直困扰着我,直到我重新启动机器?

为什么 AutoHotKey 会以某种方式导致出现一堆错误消息并一直困扰着我,直到我重新启动机器?

我的 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并查找例如TestWinActivate这是不太可能的,但是......

  • 禁用电脑上的第三方软件- 防病毒程序或任何可能在后台运行的程序都可能导致您收到的错误,与 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;
}
?>

相关内容