如何让一个未知类型文件只被打开一次
作者:admin 日期:2008-02-29
有时候程序里面需要对指定文件只运行一次的功能.
对于可执行文件等已知文件的处理是相当简单的,比如EXE文件,直接Shell后返回的就是PID,就可以控制了.
但是对于非可执行文件呢?比如xx.txt,如何知道已经有进程打开它了?
这里面有两个方面要考虑,如下:
一,目标进程不是通过命令行打开目标文件的;
比如,手工执行记事本,再"文件--->打开"来打开TXT文档.
二,目标进程是通过命令行打开目标文件的;
这个就比较好处理,之前我正好写了个读进程命令行的模块,正好能用上.
对于第一种情况,比较麻烦了,我不想搞...再说已经有人搞过了,比如陈辉(陈辉的BLOG),可以去看看
至于第二种情况,我想我基本上能搞定~~嘿嘿
我的思路是:
一,把进程列表里的命令行都列出来;
二,与即将准备执行的命令行相比较;
三,如果包含了,就跳出;
四,如果没有包含,就调用ShellExecute执行这个命令行.
基于以上思路,就组合了一个这样的程序出来,模块都是以前写的,多添加了一个按命令行查询的函数而已:
[codes=vb]Private Sub Command1_Click()
Dim theCmdLine As String
theCmdLine = "d:\1.txt" '目标命令行,可以是非可执行文件
If FindProcessEx(theCmdLine) = False Then '查询进程中是否已经存在进程包含了这个命令行
Call OpenFile(theCmdLine)
Else
MsgBox theCmdLine & "已经执行!"
End If
End Sub[/codes]
使用了三个模块,代码比较多就不贴上来,在这里可以下载整个工程:
点击下载此文件
对于可执行文件等已知文件的处理是相当简单的,比如EXE文件,直接Shell后返回的就是PID,就可以控制了.
但是对于非可执行文件呢?比如xx.txt,如何知道已经有进程打开它了?
这里面有两个方面要考虑,如下:
一,目标进程不是通过命令行打开目标文件的;
比如,手工执行记事本,再"文件--->打开"来打开TXT文档.
二,目标进程是通过命令行打开目标文件的;
这个就比较好处理,之前我正好写了个读进程命令行的模块,正好能用上.
对于第一种情况,比较麻烦了,我不想搞...再说已经有人搞过了,比如陈辉(陈辉的BLOG),可以去看看
至于第二种情况,我想我基本上能搞定~~嘿嘿
我的思路是:
一,把进程列表里的命令行都列出来;
二,与即将准备执行的命令行相比较;
三,如果包含了,就跳出;
四,如果没有包含,就调用ShellExecute执行这个命令行.
基于以上思路,就组合了一个这样的程序出来,模块都是以前写的,多添加了一个按命令行查询的函数而已:
[codes=vb]Private Sub Command1_Click()
Dim theCmdLine As String
theCmdLine = "d:\1.txt" '目标命令行,可以是非可执行文件
If FindProcessEx(theCmdLine) = False Then '查询进程中是否已经存在进程包含了这个命令行
Call OpenFile(theCmdLine)
Else
MsgBox theCmdLine & "已经执行!"
End If
End Sub[/codes]
使用了三个模块,代码比较多就不贴上来,在这里可以下载整个工程:

评论: 1 | 引用: 0 | 查看次数: 1358


我有事实认证绝对可行。顶