我有几个脚本试图访问剪贴板。一次只有一个脚本可以访问剪贴板。我的解决方案不起作用。这是我实施的解决方案
- 检查 clipboardLock.txt 是否存在。
- - 如果它不存在则创建它
- --do 进程
- - 如果确实存在,则等待 3 秒到 10 秒并检查它是否存在
这没有很好地工作,因为两个脚本试图创建文件并出错。有没有一种技术可以保证只有一个脚本可以访问剪贴板?另外,我无权访问数据库。
不要让脚本创建文件,而是让它们以独占模式打开现有文件(即,其他人无法打开它)。如果文件打开处理可以继续,否则脚本必须等待。
为了以独占方式打开文件,您可以使用OpenTextFile打开它进行写入:
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set MyFile = fso.OpenTextFile(FileName, ForWriting)
处理完成后,关闭文件,以便其他脚本可以尝试打开文件。
使用您的方法,vbscript 不会阻止 ForWriting 并等待文件关闭。启动以下脚本两次...首先将 msgbox“文件打开...”保持打开状态...然后再次启动。您将收到“Permission Denied”,第二个脚本将中断。On Error Resume Next 将破坏等待文件可用后再继续的目标。
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("c:\somefile.txt", ForWriting, True)
wscript.echo "File Open..."
filetxt.Close
wscript.echo "Done..."
所以我看到有 4 个赞成票……这可能是如何工作的?
这是一个工作例程 - 只需坐在 while 循环中,直到文件可用:
lockFile
sub lockFile ()
Dim fso, LockFile, LockFileName, done
Const ForWriting = 2
LockFileName = "C:\somefile.lck"
Set filesys = CreateObject("Scripting.FileSystemObject")
done = false
on error resume next 'need to evaluate error
while (not(done))
err.clear
Set filetxt = filesys.OpenTextFile(LockFileName, ForWriting, True)
if (err.number = 0) then
done = true
else
done = false
end if
wscript.echo "Error [0=file open, 70=file in use] : " & err.number
wscript.sleep(1000) 'wait one second instead of chewing up CPU
wend
wscript.echo "File Open..."
filetxt.Close
wscript.echo "Done..."
on error goto 0 'reset error level
end sub