如何让一个未知类型文件只被打开一次

有时候程序里面需要对指定文件只运行一次的功能.

对于可执行文件等已知文件的处理是相当简单的,比如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
有来有去
有来有去[2008-02-29 11:12 AM | ]
我有事实认证绝对可行。顶