J
jiashenglv
Unregistered / Unconfirmed
GUEST, unregistred user!
有一个重要的数据文件,已知文件名(比如password.db),该文件可以被'DBD32.exe'打开,也可以被用户自己开发的其它程序打开。应用程序检测到该文件已经被某个程序打开,如果提示让用户自己去关闭它是不明智的选择。如何知道它是被哪个程序/进程打开的,并关闭相应的程序或进程?<br><br>判断文件是否被其他程序打开:<br>var<br> HFileRes:HFILE;<br> Result:Boolean;<br> fName:string;<br>begin<br> fName:='d:/password.db';<br> Result:=false;<br> if not FileExists(fName) then<br> exit;<br> HFileRes:=CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, <br> 0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);<br> Result:=(HFileRes=INVALID_HANDLE_VALUE);<br> if not Result then CloseHandle(HFileRes)<br> else ShowMessage('文件正在被使用!');<br>end;<br><br>关闭DBD32进程:<br>uses<br> Tlhelp32;<br>...<br>var<br> Snap:THandle;<br> PPro:TPROCESSENTRY32;<br> h:Hwnd;<br> Found:Boolean;<br>begin<br> Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br> Found:=Process32First(Snap,PPro);<br> while Found do<br> begin<br> if UpperCase(ExtractFileName(PPro.szExeFile))='DBD32.EXE' then<br> begin<br> h:=OpenProcess(PROCESS_ALL_ACCESS,true,PPro.th32ProcessID);<br> TerminateProcess(h,0);<br> ShowMessage(IntToStr(h));<br> Caption:='Already Killed';<br> end;<br> Found:=Process32Next(Snap,PPro);<br> end;<br>end;<br>(如果是这样就简单了...)<br><br>可是,如何捕获password.db正在被其它程序(比如'Me.exe',该程序的名称是未知的)使用,并关闭该程序?<br><br>分数不够可以再加!!!