已知文件名(比如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',该程序的名称是未知的)使用,并关闭该程序?分数不够可以再加!!
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',该程序的名称是未知的)使用,并关闭该程序?分数不够可以再加!!
解决方案 »
- 如何在vista-uac開啓情況下,讀寫C:\Program Files
- 如和擦除canvas上画的图形?
- tchar 中 求平均值的 series 怎么显示不出来?
- 大家帮我推荐个语音卡,有价格的最好?100分
- 送大家一个使用SQL SERVER的mp3播放器,含代码!!(up有分)
- 哪种语言比较好学,用于系统研发
- 请问如何搜索游戏的内存数据。
- DOCM服务器,客户端,如何配置?
- 求助??如何在Edit中随用户的输入而自动换行,但是内容要全部显示?
- 你们注意csdn的问题标题没有?怎么做的。。。请进——>
- 请问如何用代码设置默认打印机的纸张类型及纸张大小???? 急!!!!!!
- 关于ComboBox控件的问题。
能不能给点详细的说明,有高分赠送!
如果只想知道打开些文件的进程,只需要在第一次打开时把这个进程命令行参数写入一个INI文件,
下一次打开时再读取就是了.
简单点说吧,在我的程序的FormCreate时,检查发现'password.db'已经
被别的程序或进程(不一定有窗体)打开,而且是独占地打开的。我想
关闭这个文件后继续运行我的程序。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2180386。
遇到此类问题者请参阅:
http://www.szonline.net/content/2003/200308/20030806/198966.html。
由xianjun提供。