2011-01-10 71 views
2

我已阅读关于我的问题的一些帖子,但我没有找到正确的解决方案。 我早就当前文件的完整列表中使用,例如:列出打开的文件

*.mp3 files opened by Windows Media Player 
*.txt files opened by Notepad.exe 
*.avi files opened by VLC etc... 

随着FileWatcher系统,我可以被创建/修改/更新或删除,但不能打开的文件。

我该怎么做?

+0

你的意思是“正在使用的文件”,考虑编辑你的文章和标题,因为它更准确地描述了你的内容。 “打开的文件”可能也适合,但IMO不太准确。 – 2011-01-10 11:47:12

回答

1

您可以使用Sysinternals的Process Explorer工具来获取这些信息,但我认为您可以轻松地通过代码(重新实现Process Explorer本身)来做同样的事情。

0

你可以用简单代码实现的大部分过程遍历所有进程并阅读其Title - 大多数程序会将当前文件放入其标题中,例如,记事本将有窗口标题“TextFile.txt - 记事本”。

如果你喜欢,我可以汇集一些快速的例子。为了实现你想要的东西,你必须以某种低级方式“挂钩”进程,并且看看它们的内部结构 - FrédéricHamidi的回复几乎涵盖了这一点。

+0

没关系,但是如果我用Windows Media Player打开文件,我没有这个信息:( – CeccoCQ 2011-01-10 12:11:52

+0

@Cecco for Media Player,你可以从这里获取部分代码:http://www.codeproject.com/KB/ cs/wmp_pinvoke.aspx我很确定可以发送一些消息并获得“正在播放”的值 – 2011-01-10 12:35:59

0

我建议最简单的方法是使用来自Process Explorer相同人员的Handle command-line tool

你也许可以从你的代码中调用这个过程,然后解析输出,这个输出基本上只是一个打开文件(和注册表项)的大列表,并且将打开该文件的过程分成多个部分。

我认为Handle使用的是NT对象管理器API,因此如果您需要自己完成整个任务,可能值得考虑。