已知文件名(比如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',该程序的名称是未知的)使用,并关闭该程序?分数不够可以再加!!  

解决方案 »

  1.   

    To fengyvn:
      能不能给点详细的说明,有高分赠送!
      

  2.   

    或者用简单点的办法.
    如果只想知道打开些文件的进程,只需要在第一次打开时把这个进程命令行参数写入一个INI文件,
    下一次打开时再读取就是了.
      

  3.   

    難,可能要從訪文件被打開的handle入手吧!!
      

  4.   

    findwindow(),然后杀掉那个进程不就可以了吗?
      

  5.   

    To fengyvn & aiirii:
    简单点说吧,在我的程序的FormCreate时,检查发现'password.db'已经
    被别的程序或进程(不一定有窗体)打开,而且是独占地打开的。我想
    关闭这个文件后继续运行我的程序。
      

  6.   

    我已经在大富翁论坛上送出了200分:
    http://www.delphibbs.com/delphibbs/dispq.asp?lid=2180386。
    遇到此类问题者请参阅:
    http://www.szonline.net/content/2003/200308/20030806/198966.html。
    由xianjun提供。
      

  7.   

    jiashenglv(苦瓜) 提的,也不是很好的解決方法,期待有更好的解法