请教各位,如何知道某个文件是否被打开,哪个进程打开
{:face (396):} 如题,,举个例子。在桌面上有个1.txt,怎样判断此文件已经被打开,如果被打开,知道是被什么进程打开?(txt可以被notepad.exe 或者别的编辑文本程序打开的)
谢谢各位 用记事本打开1.txt后,会有窗口 1.txt - 记事本
用Word打开,会有1.txt - Microsoft Word
所以,这是一个笨办法:判断各窗口标题里是否有 1.txt,再根据后面的名称判断是什么程序打开的
更高级的办法还请专家解答 回复 2# xyold1
谢谢你的回答,不知道有别的方法没? 本帖最后由 lixiaolong 于 2011-3-10 16:33 编辑
回复 3# leon460
看看这个可以不?按xyold1说的方法写了一个.
只能检查一个进程,有些程序无法获取(比如SciTE).
$a = WhatProcessOpenFile("1.txt")
If Not @error Then
MsgBox(0, '文件名 - ' & $a, $a)
Else
MsgBox(16, '文件名 - ' & $a, '指定的文件未打开!')
EndIf
Func WhatProcessOpenFile($File)
Local $ProcessName, $WinName
Local $WinList = WinList()
Local $ProcessList = ProcessList()
Local $StringLen = StringLen($File)
For $i = 1 To $WinList
If $WinList[$i] <> '' Then ConsoleWrite($WinList[$i] & @CRLF)
If StringInStr($WinList[$i], $File) <> 0 Then
$WinName = StringRegExpReplace($WinList[$i], '.+(?=\\' & $File & ')', '')
If StringLeft($WinName, $StringLen) = $File Or _
StringLeft($WinName, $StringLen) = '\' & _
StringMid($File, 1, $StringLen - 1) Then
$ProcessList = ProcessList()
For $s = 1 To $ProcessList
If $ProcessList[$s] = WinGetProcess _
($WinList[$i]) Then ExitLoop
Next
$ProcessName = $ProcessList[$s]
SetError(0)
ExitLoop
EndIf
Else
$ProcessName = ''
SetError(1)
EndIf
Next
$ProcessName = $File
Return $ProcessName
EndFunc ;==>WhatProcessOpenFile {:face (114):} 楼上的太强了,那么快就写出那么长的代码 回复 4# lixiaolong
太感谢了,可以用的,我的 可以检查到scite.exe ,我的环境是win7企业版
如您所说,只能检查一个进程。
谢谢了 真的很不错,谢谢楼主 WinGetProcess()
页:
[1]