对于我当前的程序,需要检测当前活动文件的路径,例如我的程序应该在后台运行(没问题),当你输入一个特殊的快捷方式时,它必须查看前台的文件是什么(pdf/a doc/whatever),并找出该文件的路径。
这是可能的,如果是的话,怎么做?我在 Windows 机器上使用 C++。
非常感谢!
3 回答
Found the solution to my problem: I can use the WinAPI-Function "FindWindow" and "GetWindowText".
给定一个进程 ID
如果您知道文件的 PID(进程 ID),则可以使用 windows API,正如您提到您在 windows 上,使用EnumProcesses枚举进程列表,然后使用OpenProcess返回一个句柄,您可以在该句柄上使用GetModuleFileNameEx .
那里的链接应该提供足够的信息来使用 API。基本原则是根据进程的句柄或进程 ID 识别进程,然后使用 windows API 获取所需的信息。
给定一个文件句柄
如果您有该文件的句柄,您可以查看GetFinalPathNameByHandle on Vista 或更高版本。尽管该链接还提供了有关使用以前版本的文件映射的信息。
正如其他人所说,如果您自己打开文件,您可能只想使用状态来维护最初使用的位置。
在 Linux 上,我会使用 lsof - 列出打开的文件并使用 grep 查找这些文件,这很有趣。在进程监视器或文件监视器的 Windows 批处理模式下(来自 SysInternals)
我认为这是一个非常相似的问题:如何确定特定文件是否在 Windows 中打开?
(可能这就是您获得 -1 的原因。)