VB 调用 WindowsAPI 函数GetModuleFileName、 GetProcessImageFileName 和QueryFullProcessImageName获取进程文件路径

本文介绍了如何使用VB6.0调用Windows API函数GetModuleFileName、GetProcessImageFileName和QueryFullProcessImageName来获取进程文件路径。在不同Windows系统下,需要选择合适的API函数,如在Windows 2000使用GetModuleFileName,Windows 7及以后版本使用QueryFullProcessImageName。同时,文章还涉及了判断操作系统版本和处理返回结果的转换问题。
摘要由CSDN通过智能技术生成

Windows编程中,需要获取一个已打开窗口程序的完整路径,以便下次用ShellExecute 函数直接打开。

能实现这一目标的Windows API函数有3个: GetModuleFileName、 GetProcessImageFileName 和QueryFullProcessImageName 。网上的API函数手册大多只能查到第一个,后面两个只能百度查找调用方法,然而却都讲得不清不楚。 本人是一个业余编程爱好者,通过艰难摸索,走了很多弯路,终于搞清了使用方法。现班门弄斧如下:

这三个函数的功能是一样的,只是适用于不同的Windows系统。换言之:用GetModuleFileName函数在Windows2000系统下能得到正确结果,但在Windows7系统下却不行;用QueryFullProcessImageName函数在Windows7系统下能得到正确结果,但在WindowsXP系统却提示Run-time error '453':Can't find DLL entry point QueryFullProcessImageNameA in kernel32错误。

根据微软官方的说法,要根据不同的Windows系统,使用相应的API函数,以保证结果正确:

Windows 2000        建议 GetModuleFileName()
Windows XP x32    建议  GetProcessImageFileName()
Windows XP x64    建议  GetProcessImageFileName()
Windows Vista       建议  QueryFullProcessImageName()
Windows 7 以后     建议  QueryFullProcessImageName()

这就牵扯出其他需要解决的问题:一个是要判断操作系统版本(具体参看https://docs.microsoft.com/zh-cn/windows/win32/sysinfo/operating-system-version?redirectedfrom=MSDN),以决定用哪个函数;二个是要对返回的结果进行转化,统一格式(因为前两个函数返回的结果是象这样的:\Device\HarddiskVolume1\Windows\System32\notepad.exe,而不是象C:\Windows\System32\notepad.exe)。现在一个一个来解决:

'第一步,在VB中申明以下九个API函数:
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function QueryFu
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值