如何以编程方式获取Windows中打开的文件的位置/文件路径?

时间:2018-08-06 19:10:03

标签: windows process path location filepath

我正在一个需要提取Windows中打开的文件的位置的项目中,例如,如果打开了Word文档,则需要以编程方式确定打开的文件的位置。

我尝试使用GetWindowModuleFileName(),但仅提供了Word的安装位置。 我已经尝试过的其他方法是:

  1. 使用Microsoft.Office.Interop使用word.ActiveDocument.FullName获取路径,但它仅支持Office文件,并且也支持Office 2013。

  2. Handle实用程序,提供引用给定进程(PID)的所有窗口句柄。我需要解析由此提供的输出,以便隔离可能是列表中任何一个句柄的文件路径,这是一项艰巨的任务。

我想知道是否有比我在这里提到的方法更直接的替代方法。

谢谢您的时间。

编辑:我的程序当前使用Java Native Access(JNA)来获取活动窗口。 这是我的代码:

    public synchronized Map<String, Object> getWindowDetails() {

            Map<String, Object> titleProcessIdMap = new LinkedHashMap<>();
            char[] buffer = new char[Constants.MAX_TITLE_LENGTH * 2];

            //get active window
            WinDef.HWND hwnd = User32.INSTANCE.GetForegroundWindow();

            //get rectangle structure of active window  
            WinDef.RECT rect = new WinDef.RECT();                
            User32.INSTANCE.GetWindowRect(hwnd, rect); 

            //get active window title       
            User32.INSTANCE.GetWindowText(hwnd, buffer, Constants.MAX_TITLE_LENGTH);
            String windowTitle = Native.toString(buffer).replaceAll("\'", "\\\'");

            //get process Id of active window
            IntByReference pointer = new IntByReference();                
            User32.INSTANCE.GetWindowThreadProcessId(hwnd, pointer);

            //add data to map
            titleProcessIdMap.put("title", windowTitle);
            titleProcessIdMap.put("pid", String.valueOf(pointer.getValue()));
            titleProcessIdMap.put("rect", rect);
            return titleProcessIdMap;
        }

假设“活动窗口”是Word文档,我需要一种方法来识别它是Word文档并获取系统中打开的Word文档的文件路径/位置。

0 个答案:

没有答案