需要檢測當前活動文件的路徑,例如,我的程序應該在後臺運行(沒問題),當你輸入一個特殊的快捷方式時,必須查看前臺的文件(pdf/a doc/whatever),並找出這個文件的路徑。
這是可能的,如果是的話,怎麼樣?我在Windows機器上使用C++。
非常感謝您!檢測當前活動文件的路徑
回答
給定一個進程ID
如果你知道文件的PID(進程ID),你可以使用windows API,你提到你在Windows中,通過使用EnumProcesses進程列表枚舉然後使用OpenProcess返回一個句柄,您可以使用GetModuleFileNameEx。
這裏的鏈接應該提供足夠的信息來使用API。基本原則是識別給定處理或進程ID的進程,然後使用Windows API獲取所需的信息。
給定文件句柄
如果你有一個句柄的文件,你可以看看看GetFinalPathNameByHandle在Vista或更高版本。雖然鏈接還提供了使用先前版本的文件映射的信息。
正如其他人所說,如果您自己打開文件,您可能只想使用狀態來維護最初使用的位置。
這適用於.exe和.dll。如果有人打開一個文件「my_work.doc」,我不認爲有一個官方的API來找到該文件的名稱 - 雖然顯然有一種方法可以做到這一點,因爲ProcessExplorer可以做到這一點 - 但它不解釋它如何在我知道的任何地方工作。 –
我假設有'my_work.doc'的文件句柄,在MSDN上快速搜索顯示Vista或更高版本有GetFinalPathNameByHandle,我將編輯 – chrisw
@MatsPetersson:ProcExp將顯示命令行IIRC。但是,如果我打開記事本,並使用「另存爲...」,您可能需要新文件。記事本不會保持文件句柄打開,所以這也不是解決方案。如果這甚至不能用記事本工作,那麼這將會如何可靠? – MSalters
在Linux上,我會使用lsof - 列出打開的文件和grep這些,這很有趣。 過程監視器或文件監視器(Sysinternals公司)
我覺得這是一個非常類似的問題的Windows批處理模式:(也許這就是爲什麼你贏得-1)How can I determine whether a specific file is open in Windows?
這不是一個類似的問題,因爲那樣你只知道一個特定的文件是否已經打開,但是你不知道哪個文件是當前活動的文件。 –
找到解決我的問題的方法:我可以使用WinAPI函數「FindWindow」和「GetWindowText」。
- 1. VS代碼 - 當前活動文件所在文件夾的完整路徑
- 2. 檢測焦點當前活動
- 3. 將當前路徑的活動ID傳遞給組件
- 4. 檢索活動組件和路徑
- 5. webpack中的當前文件路徑
- 6. 獲取當前文件的路徑
- 7. wx.TextCtrl中的自動檢測文件或文件夾路徑
- 8. Xcode 4:我可以通過AppleScript獲取當前活動文件的路徑嗎?
- 9. Android:當活動返回到前一活動時檢測
- 10. 獲取路徑的路徑,當前類文件
- 11. 檢索當前源文件與魚的路徑
- 12. 獲取當前文件夾路徑
- 13. JSF導航與當前/活動路徑不同的CSS類
- 14. PHP動態包括基於當前的文件路徑
- 15. 測試路徑無法檢查文件夾路徑
- 16. 檢測當前前臺活動並重新加載它
- 17. 檢查{{路徑()}}是當前{{路徑()}}在Symfony2中
- 18. 如何在顫動中獲取當前的路徑路徑?
- 19. SVG路徑檢測
- 20. Android - 複雜拖動的檢測路徑
- 21. 獲取當前項目中文件的文件路徑
- 22. 返回文件的文件路徑,而不是當前目錄
- 23. C#自動檢測計算機名稱/文件路徑
- 24. functions.php中的當前路徑
- 25. C#檢測路徑中的文件夾路口
- 26. C#:選擇當前活動文件
- 27. 我如何檢測當前是否顯示特定的活動?
- 28. 檢測當前位置並填充我的活動
- 29. 檢測導航控制器的當前活動子視圖
- 30. 當前活動只讀取檢測到的nfc卡
通常情況下,您會將當前打開的文件的文件路徑保存在變量中,並從中知道。它是你程序狀態的一部分。 –
您可以在此上下文中定義背景和前景嗎?你的意思是屏幕上或過程明智嗎? – enhzflep
您能否更詳細地描述一下您實際嘗試實現的目標?所以,如果有人在Word中打開「my_work.doc」,你想用它做什麼?爲什麼這條道路很重要? –