如何使用 Autohotkey 'listen' 来更改文件?

How to have Autohotkey 'listen' for a change to a file?

我有一个文本文件,我们将其命名为C:\to_run.txt。我希望我的 Autohotkey 脚本以这种方式 'listen' 到此文件,当它检测到更改时,它会立即根据文件的内容执行操作,然后再次使文件空白。

我可以处理最后的部分,所以我真的是在寻求一种检测文件更改的有效方法吗?我说高效是因为我的 Autohotkey 脚本变得相当长,我不希望这个监听函数以任何方式挂断脚本的其余部分。

查看 WatchDirectory()

只需确保您运行正在latest version of AHK

要启动并 运行ning,请先下载这三个脚本并将它们保存到您的 /lib folder

之后,只需指向您想查看的位置,提供回调函数,如果需要,还可以提供第三个参数来观察特定的变化。有关完整文档,请参阅 this forum post

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

#Persistent

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

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

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

假设我们真的只讨论一个要检查的文件: 肯定不如 Sidola 的答案漂亮,但不需要外部库:

#persistent

lastFileContent := ""
setTimer, checkFile, 20
return

checkFile:
fileread newFileContent, changingDocument.txt
if(newFileContent != lastFileContent) {
    lastFileContent := newFileContent
    msgbox, content changed to: %newFileContent%
}
return

在这种情况下,为了检查较大的文件,比较 MD5-checksum 可能比比较整个文件内容更好。

注意:我还没有测试这方面的性能影响。此脚本每秒打开文件 50 次,可能会占用大量硬盘。