请问如何判断一个PDF文件是被什么程序打开了?

howze 2020-10-20 11:51:15
一个PDF文件
当双击打开这个pdf文件时,如何判断是被哪个程序打开的?
比如电脑里有Adobe reader,有福昕,有wps,等等好些PDF阅读器。
现在希望这个PDF只被wps打开,当使用其他文件打开的时候出现提示。
请问这个该如何实现?
谢谢!
...全文
19910 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨易夕 2020-10-28
  • 打赏
  • 举报
回复
换个思路,就是你要删除一个文件时,会提示该文件被其他进程占用。 这种情况就可以使用win32的api去获取该文件关联的句柄。
圣殿骑士18 2020-10-28
  • 打赏
  • 举报
回复
这估计要引用操作系统层面的库了
bu_ge 2020-10-28
  • 打赏
  • 举报
回复
要检测文件被那个进程占用,需要使用微软提供的工具Handle.exe,这里有微软提供的下载 我们可以在c#中调用Handle.exe 来检测到底哪个进程占用了文件 出处: https://www.cnblogs.com/qq458978/p/4517076.html
耗子哭死猫 2020-10-28
  • 打赏
  • 举报
回复
去查找进程,看看wps/adobe/Microsoft Edge是否运行,应该是读取句柄,从句柄找出标题,标题应该就是你打开的文件。感觉这样好啰嗦
Mister 2020-10-28
  • 打赏
  • 举报
回复
引用 13 楼 howze 的回复:
[quote=引用 10 楼 Mister 的回复:]这个功能实现,不建议折腾,涉及到操作系统内核编程,需要 C/C++ 语言支持进行混合编程。

实现思路:通过 ZwQuerySystemInformation 查询句柄信息,调用 ZwQueryObjec 获取句柄所代表对象信息,查出目标文件(设备名+目录名),逐一比对,一旦比对成功,再进行下一步操作。


那确实麻烦了,没有别的办法了吗[/quote]

没有咯... 判断文件是什么程序打开,只能是查它的内核句柄,属于 Windows DDK 编程 C# 做不了,建议你换个思路。
howze 2020-10-28
  • 打赏
  • 举报
回复
引用 10 楼 Mister 的回复:
这个功能实现,不建议折腾,涉及到操作系统内核编程,需要 C/C++ 语言支持进行混合编程。 实现思路:通过 ZwQuerySystemInformation 查询句柄信息,调用 ZwQueryObjec 获取句柄所代表对象信息,查出目标文件(设备名+目录名),逐一比对,一旦比对成功,再进行下一步操作。
那确实麻烦了,没有别的办法了吗
howze 2020-10-28
  • 打赏
  • 举报
回复
引用 7 楼 耗子哭死猫 的回复:
读取pdf文件的打开类型,pdf不设置有默认的。读取到打开类型就知道是被那个程序打开了。
这样只能获取默认打开程序,比如用户默认打开程序是adobe,然后用右键自行选择打开方式为wps,那这样判别就会有误,用户实际是使用了wps的,我却误判为用户用了adobe
Mister 2020-10-28
  • 打赏
  • 举报
回复
以 Nt、Zw 打头的都是 Ring0 级别函数,你的程序必须是驱动程序,属于 Windows DDK 编程。
Mister 2020-10-28
  • 打赏
  • 举报
回复
这个功能实现,不建议折腾,涉及到操作系统内核编程,需要 C/C++ 语言支持进行混合编程。

实现思路:通过 ZwQuerySystemInformation 查询句柄信息,调用 ZwQueryObjec 获取句柄所代表对象信息,查出目标文件(设备名+目录名),逐一比对,一旦比对成功,再进行下一步操作。
耗子哭死猫 2020-10-28
  • 打赏
  • 举报
回复
https://blog.csdn.net/nihao198503/article/details/8856537
耗子哭死猫 2020-10-28
  • 打赏
  • 举报
回复
读取pdf文件的打开类型,pdf不设置有默认的。读取到打开类型就知道是被那个程序打开了。
howze 2020-10-27
  • 打赏
  • 举报
回复
引用 3 楼 Calm__C 的回复:
右键PDF文件,选择指定的打开方式
不是这个意思,我是问有什么方式可以让我知道PDF是被哪个程序打开了,而不是如何设置打开方式
Calm__C 2020-10-23
  • 打赏
  • 举报
回复
右键PDF文件,选择指定的打开方式
巅峰的路上 2020-10-21
  • 打赏
  • 举报
回复
把缀名改了,再去WPS注册。提个思路,不确定可行不。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧