找回密码
 加入
搜索
查看: 2961|回复: 5

如何得到进程文件EXE的目录路径?

  [复制链接]
发表于 2009-12-11 10:41:48 | 显示全部楼层 |阅读模式
本帖最后由 hapon 于 2009-12-11 10:57 编辑

才学习AU3,请高手勿笑。
如题,是目录路径,非全路径。如c:\install\setup.exe,要得到c:\install\这个目录路径。
另外本论坛的QQ群号是多少呢,想讨教学习。

;检测插件安装目录
$var_rzxsurename = ProcessList("rzxsurename.exe")
for $i = 1 to $var_rzxsurename[0][0]
        ;MsgBox(64,"进程信息(API)","进程路径是:"&Processpath($var_rzxsurename[$i][1]))
$var_rzxsurename2=Processpath($var_rzxsurename[$i][1])               
        next

Func Processpath($iPID)
;通过API获取指定PID的进程路径
    Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
    If $aProc[0] = 0 Then Return SetError(1, 0, '')
    Local $vStruct = DllStructCreate('int[1024]')
    DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
    Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
    If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
    Return $aReturn[3]
EndFunc

;删除卡数据库
If FileExists("&$变量\alllostinfo.dat") Then
        FileDelete("&$变量\alllostinfo.dat")
        MsgBox(48,"卡解封","解封成功。如再提示被禁用,请再运行此程序。",20)
        Exit
EndIf
发表于 2009-12-11 11:00:02 | 显示全部楼层
 楼主| 发表于 2009-12-11 11:19:39 | 显示全部楼层
谢谢。
但是我不是要的这种全路径呢,只要目录名。
发表于 2009-12-11 19:46:35 | 显示全部楼层
本帖最后由 ajian55 于 2009-12-11 19:50 编辑

如果是自身的目录名,同样有一个宏,去宏那里找找。而且你已经获取了全名,用一个字符串函数也可以得到目录名啊。
发表于 2009-12-11 21:30:07 | 显示全部楼层
$a = 'c:\install\setup.exe'
Msgbox(0, 0, StringRegExpReplace($a, '(.+\\)[^\\]+', '\1'))
 楼主| 发表于 2009-12-12 01:48:02 | 显示全部楼层
收到,谢谢,好多函数都不知道。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2025-1-12 12:12 , Processed in 0.090983 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表