blackeyes 发表于 2013-11-13 00:41:50

如何得到当前程序运行所在盘符

本帖最后由 blackeyes 于 2013-11-13 00:55 编辑

新手第一个问题啊,哈哈,望高手给予指点,谢谢了

在本论坛搜索了一下其它的帖子,看得有点迷糊了,我具体说一下我的问题

我编译了一个程序,运行此程序,此程序我放在光盘上,但因为每台电脑分区不同,所以每台电脑的光盘盘符是不一样的,此程序参数里需要具体指定当前光驱盘符(不能用相对路径),用哪个函数可以得到当前程序所在的盘符,如果我在I:盘上运行的此程序ABC.EXE,如何得到当前光驱“I:”盘符啊

因为此程序里要调用别的程序,调用时还要带参数,而且此参数不能用相对路径,例如 TEST1.EXE GET="\PATH\ABC.INI" 这样的相对路径就不行,必须是绝对路径,例如:TEST1.EXE GET="I:\PATH\\ABC.INI"

_WinAPI_GetProcessFileName([$PID]),这个函数可以吗?具体如何调用?

像下面这样?
$path=_WinAPI_GetProcessFileName(“ABC.EXE”)
这样能得到ABC.EXE当前所在盘符吗?

blackeyes 发表于 2013-11-13 01:52:46

找到答案了,用下面函数
$Pid = ProcessExists("abc.exe")

$ProDir = _GetDir(_WinAPI_GetProcessFileName($Pid))

Func _GetDir($PathData, $Flag = 1)
      $var = StringSplit($PathData, "\")
      If Not @error Then
                $FileName = $var ;文件名
                $FileDir = $var ;文件所在目录名
                $FileFullPath = StringTrimRight($PathData, StringLen($FileName));文件全目录
      Else
                SetError(-1)
                Return -1 ;路径错误
      EndIf

      Switch $Flag
                Case 1
                        Return $FileFullPath ;返回全部目录,不包括文件名
                Case 2
                        Return $FileName ;返回文件名
                Case 3
                        Return $FileDir ;返回父母目录一个目录的名字
      EndSwitch ;==>_GetDir
EndFunc

user3000 发表于 2013-11-13 07:28:47

回复 2# blackeyes

楼主,AU3内置很多“宏”,比如:@ScriptDir
查看下帮助文档,你会有更多收获。
建议新上手的朋友,有事没事都可以多翻看下帮助。

虫子樱桃 发表于 2013-11-13 10:49:18

正则学的烂,献丑下
$s= StringRegExp(@ScriptFullPath,'.\:',1)
MsgBox(0,'',$s)

netsmu 发表于 2013-11-13 22:02:59

MsgBox(0,0,StringLeft(@ScriptDir,1)) 这个就可以了。获取到的是C
如果要C:\就是
MsgBox(0,0,StringLeft(@ScriptDir,3))
页: [1]
查看完整版本: 如何得到当前程序运行所在盘符