已知文件名,如何知道它是被哪个程序/进程打开的,并关闭相应的程序或进程?
已知文件名(比如password.db),可能被'DBD32.exe'打开,也可能被用户自己开发的程序打开,如何知道它是被哪个程序/进程打开的,并关闭相应的程序或进程?
判断文件是否被其他程序打开:
var
HFileRes:HFILE;
Result:Boolean;
fName:string;
begin
fName:='d:\password.db';
Result:=false;
if not FileExists(fName) then
exit;
HFileRes:=CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,
0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Result:=(HFileRes=INVALID_HANDLE_VALUE);
if not Result then
CloseHandle(HFileRes)
else ShowMessage('文件正在被使用!');
end;
关闭DBD32进程:
uses
Tlhelp32;
...
var
Snap:THandle;
PPro:TPROCESSENTRY32;
h:Hwnd;
Found:Boolean;
begin
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
Found:=Process32First(Snap,PPro);
while Found do
begin
if UpperCase(ExtractFileName(PPro.szExeFile))='DBD32.EXE' then
begin
h:=OpenProcess(PROCESS_ALL_ACCESS,true,PPro.th32ProcessID);
TerminateProcess(h,0);
ShowMessage(IntToStr(h));
Caption:='Already Killed';
end;
Found:=Process32Next(Snap,PPro);
end;
end;
如何捕获password.db正在被其它程序(比如'Me.exe',该程序的名称是未知的)使用,并关闭该程序?
分数不够可以再加!!