2011-01-10 72 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,因此如果您需要自己完成整個任務,可能值得考慮。