我正在一个需要提取Windows中打开的文件的位置的项目中,例如,如果打开了Word文档,则需要以编程方式确定打开的文件的位置。
我尝试使用GetWindowModuleFileName(),但仅提供了Word的安装位置。 我已经尝试过的其他方法是:
使用Microsoft.Office.Interop使用word.ActiveDocument.FullName获取路径,但它仅支持Office文件,并且也支持Office 2013。
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文档的文件路径/位置。