dhwc 发表于 2011-12-27 09:32:44

怎么根据进程名判断该进程打开的文件名及路径?

本帖最后由 dhwc 于 2011-12-27 09:51 编辑

搜了半天,坛子里都是怎么根据进程名获取程序路径及文件名,请问怎样根据进程名判断该进程打开的文件名及路径?比如,现在用potplayer看电影,进程名potplayermini.exe,文件名d:\video\1.rmvb,不考虑多开的情况怎么实现??如果多开怎样根据活动窗口来查找?程序后台运行

谢谢,本人菜鸟,肯请指教

netegg 发表于 2011-12-27 09:44:06

_WinAPI_GetProcessCommandLine不知道行不行

dhwc 发表于 2011-12-27 09:46:07

这个是获取进程的命令行吧?

netegg 发表于 2011-12-27 09:58:40

本帖最后由 netegg 于 2011-12-27 10:04 编辑

回复 3# dhwc
那么你以为打开文件是用的什么方式,难道光点击不发送命令行给系统吗
不对,明白你说的意思了,先打开应用,操作文件,然后获取文件信息?

dhwc 发表于 2011-12-27 10:53:33

我说的就是怎样通过进程名获取该进程正在操作哪个文件?比如例子中的那个d:\video\1.rmvb

怎样来得到它???

netegg 发表于 2011-12-27 15:18:36

这个可能要hook了

dhwc 发表于 2011-12-27 19:21:43

HOOK?楼上的高人能不能说多点啊?你这语焉不详啊

zxxputian1 发表于 2011-12-28 11:35:01

希望高手提供

pusofalse 发表于 2011-12-28 14:30:21

你如果双击运行d:\video\1.rmvb,就是可以通过2# netegg兄所说的方法,调用_WinAPI_GetProcessCommandLine 函数获取进程的命令行参数。

另一种情况,你如果不带参数先运行了potplayermini.exe,而后将1.rmvb拖入这个程序的主界面中,这种情况,必须要枚举potplayermini.exe进程所打开的文件句柄,因为播放歌曲、播放视频必然会先打开这个文件并获取一个句柄。

可能会用到的系统函数:
1、Ntdll.NtQuerySystemInfo - 枚举系统中的所有句柄。
2、Ntdll.NtDuplicateObject - 将句柄复制到自身进程空间中。
3、Ntdll.NtQueryObject - 获取句柄所对应的对象名称。
4、StringInStr - 判断对象名称中是否包含视频文件的扩展名,如.rmvb。

dhwc 发表于 2011-12-28 16:54:00

内容谢谢楼上的高人!但是,能不能给个完整的代码?
而且你提到两种可能,能不能加个判断合并在一起?
页: [1]
查看完整版本: 怎么根据进程名判断该进程打开的文件名及路径?