下你所需,载你所想!
汇集开发技术源码资料

检测文件是否被占用源码具有学习价值

:712.669KB :1 :2019-12-28 06:59:52

部分简介

亲身下河知深浅我便做了一个文件扫描工具先来说说文件占用一般常用的有2种。

1、DLL或EXE打开占用
这个大家一个知道吧,EXE或DLL被打开后就会处于占用状态
所以这个只需要扫描一下进程的DLL模块就OK
但是还有一种占用。

2、打开文件的占用
这个也是比较常见的占用方式
但是这个就无法有枚举进程DLL这么简单了
主要是利用CreateFile创建一个文件的句柄
所以只需要扫描句柄就可以。

这是获取句柄的类型,这个超级重要,file这个名字就是从这里取到的
除了取到句柄名字,还需要对取到的句柄路径进行Dos转换,就相当于把路径中类似于 \Device\HarddiskVolume1 的部分用 C:、D:等对应代替
\Device\HarddiskVolume是系统的一个路径用法,但是我们需要转换成我们常用的路径, 就需要进行DOS路径转换
最后把一堆代码拼起来就可以用了!!
至于更多的解释?
那你就看代码理解吧!

连续赋值 (真, 编辑框1.禁止, 按钮1.禁止)
编辑框_信息.加入文本 (“开始扫描”)
超级列表框1.全部删除 ()
进程_枚举 (, 进程id)
被处理次数 = 0
.计次循环首 (取数组成员数 (进程id), 计次_X)
进程_ID取模块 (进程id [计次_X], _模块信息)
.计次循环首 (取数组成员数 (_模块信息), 计次_Y)
系统_处理事件 ()
.如果真 (到文本 (到字节集 (_模块信息 [计次_Y].模块完整路径)) = 编辑框1.内容)
编辑框_信息.加入文本 (#换行符 + “进程id为:” + 到文本 (进程id [计次_X]) + “占用了文件:” + 编辑框1.内容 + #换行符 + “详细信息:被加载到DLL模块”)
插入列 = 超级列表框1.插入表项 (-1, , , , , )
被处理次数 = 被处理次数 + 1
超级列表框1.置标题 (插入列, 0, 到文本 (被处理次数))
超级列表框1.置标题 (插入列, 1, 到文本 (进程id [计次_X]))
超级列表框1.置标题 (插入列, 2, “详细信息:被加载到DLL模块”)
.如果真结束

.计次循环尾 ()
.如果真 (到小写 (进程_ID取进程名 (进程id [计次_X])) = “qq.exe”) ' QQ就不扫描了,句柄太多了,一会儿就假死了
到循环尾 ()
.如果真结束
枚举进程句柄 (进程id [计次_X], 进程_句柄信息)
系统_处理事件 ()
.计次循环首 (取数组成员数 (进程_句柄信息), 计次_W)
系统_处理事件 ()
.如果真 (到小写 (DOS路径转换 (进程_句柄信息 [计次_W].句柄名)) = 到小写 (编辑框1.内容))
编辑框_信息.加入文本 (#换行符 + “进程id为:” + 到文本 (进程id [计次_X]) + “占用了文件:” + 编辑框1.内容 + #换行符 + “详细信息:被进程打开,有File句柄”)
插入列 = 超级列表框1.插入表项 (-1, , , , , )
被处理次数 = 被处理次数 + 1
超级列表框1.置标题 (插入列, 0, 到文本 (被处理次数))
超级列表框1.置标题 (插入列, 1, 到文本 (进程id [计次_X]))
超级列表框1.置标题 (插入列, 2, “详细信息:被进程打开,有File句柄”)
.如果真结束

.计次循环尾 ()
.计次循环尾 ()
编辑框_信息.加入文本 (#换行符 + “扫描完毕”)
连续赋值 (假, 编辑框1.禁止, 按钮1.禁止)

检测文件是否被占用源码具有学习价值

热门推荐

相关文章