Autohotkey 如何使用自动热键';听一听';要更改文件吗?

Autohotkey 如何使用自动热键';听一听';要更改文件吗?,autohotkey,Autohotkey,我有一个文本文件,我们叫它C:\to\u run.txt。我希望我的自动热键脚本“侦听”此文件,以便在检测到更改时,立即根据文件内容执行操作,然后再次将文件变为空白 我可以处理最后的部分,所以我真的在寻求一种有效的方法来检测文件更改吗?我之所以说高效,是因为我的自动热键脚本越来越长,我不希望此侦听功能以任何方式挂断脚本的其余部分。签出 只需确保你正在运行 要启动并运行它,首先下载这三个脚本并将它们保存到您的应用程序中 在这之后,只需指向您想要查看的任何地方,提供回调函数,如果您愿意,还

我有一个文本文件,我们叫它
C:\to\u run.txt
。我希望我的自动热键脚本“侦听”此文件,以便在检测到更改时,立即根据文件内容执行操作,然后再次将文件变为空白

我可以处理最后的部分,所以我真的在寻求一种有效的方法来检测文件更改吗?我之所以说高效,是因为我的自动热键脚本越来越长,我不希望此侦听功能以任何方式挂断脚本的其余部分。

签出

只需确保你正在运行

要启动并运行它,首先下载这三个脚本并将它们保存到您的应用程序中

在这之后,只需指向您想要查看的任何地方,提供回调函数,如果您愿意,还可以提供第三个参数来监视特定的更改。有关完整文档,请参阅

如果您将此脚本放到它自己的文件夹中,保存并运行它,然后再次保存它,它将检测到对该脚本文件的更改

#Persistent

WatchDirectory(A_ScriptDir "\|.ahk\", "Callback", 0x10)
return

Callback(param1, param2) {
    msgBox % param1 "`n" param2
}

但是请注意,每当文件发生更改时,它将触发两次。据我所知,这似乎是Windows的行为。

假设我们实际上只讨论一个要检查的文件: 当然没有西多拉的答案那么漂亮,但不需要外部图书馆:

#persistent

lastFileContent := ""
setTimer, checkFile, 20
return

checkFile:
fileread newFileContent, changingDocument.txt
if(newFileContent != lastFileContent) {
    lastFileContent := newFileContent
    msgbox, content changed to: %newFileContent%
}
return
在这种情况下,为了检查更大的文件,最好比较s而不是整个文件内容


注意:我没有测试这方面的性能影响。这个脚本每秒打开文件50次,可能相当消耗硬盘。

我也喜欢这个答案。谢谢我正在检查一个较小的文件,所以这是适用的。哈哈-或者你可以更改设置计时器中的间隔时间,改为每分钟一次,或者,实际上,只需检查文件上的时间戳是否更改(节省磨损)。请注意,
WatchDirectory()
有一个更新的重新实现,称为(或在GitHub上)——它可能更易于使用,因为它具有较少的依赖项,并且还提供了一个非常有用的示例。