我已阅读关于我的问题的一些帖子,但我没有找到正确的解决方案。 我早就当前文件的完整列表中使用,例如:列出打开的文件
*.mp3 files opened by Windows Media Player
*.txt files opened by Notepad.exe
*.avi files opened by VLC etc...
随着FileWatcher系统,我可以被创建/修改/更新或删除,但不能打开的文件。
我该怎么做?
我已阅读关于我的问题的一些帖子,但我没有找到正确的解决方案。 我早就当前文件的完整列表中使用,例如:列出打开的文件
*.mp3 files opened by Windows Media Player
*.txt files opened by Notepad.exe
*.avi files opened by VLC etc...
随着FileWatcher系统,我可以被创建/修改/更新或删除,但不能打开的文件。
我该怎么做?
您可以使用Sysinternals的Process Explorer工具来获取这些信息,但我认为您可以轻松地通过代码(重新实现Process Explorer本身)来做同样的事情。
你可以用简单代码实现的大部分过程遍历所有进程并阅读其Title
- 大多数程序会将当前文件放入其标题中,例如,记事本将有窗口标题“TextFile.txt - 记事本”。
如果你喜欢,我可以汇集一些快速的例子。为了实现你想要的东西,你必须以某种低级方式“挂钩”进程,并且看看它们的内部结构 - FrédéricHamidi的回复几乎涵盖了这一点。
没关系,但是如果我用Windows Media Player打开文件,我没有这个信息:( – CeccoCQ 2011-01-10 12:11:52
@Cecco for Media Player,你可以从这里获取部分代码:http://www.codeproject.com/KB/ cs/wmp_pinvoke.aspx我很确定可以发送一些消息并获得“正在播放”的值 – 2011-01-10 12:35:59
我建议最简单的方法是使用来自Process Explorer相同人员的Handle command-line tool。
你也许可以从你的代码中调用这个过程,然后解析输出,这个输出基本上只是一个打开文件(和注册表项)的大列表,并且将打开该文件的过程分成多个部分。
我认为Handle使用的是NT对象管理器API,因此如果您需要自己完成整个任务,可能值得考虑。
你的意思是“正在使用的文件”,考虑编辑你的文章和标题,因为它更准确地描述了你的内容。 “打开的文件”可能也适合,但IMO不太准确。 – 2011-01-10 11:47:12