willturner 发表于 2011-3-24 11:07:35

关于使用Extern对象得到机器的当前登陆用户名


Dim result, user, leng
user = string(100, "*")
leng = 100

Extern.Declare micLong, "GetUserName", "advapi32.dll", "GetUserNameA", micString,micLong
result = Extern.GetUserName(user, leng)


原本在robot脚本中调用这个dll函数定义:
Declare   Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

改到用在QTP中以后,为什么一跑这段代码就出错呢?而且会引起QTP崩溃。求助高手如何在QTP中得到当前机器的登陆用户名。谢谢。

API的定义:

VB声明
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
说明
取得当前用户的名字
返回值
Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError
参数表
参数类型及说明
lpBufferString,一个字串缓冲区,预先初始化成由nSize指定的长度。它将用于容纳用户名
nSizeLong,初始化成lpBuffer的长度。返回以后,它会包含载入lpBuffer的字符数量
示例
Dim s$, cnt&, dl&
cnt& = 199
s$ = String$(200,0)
dl& = GetUserName(s$, cnt)
Debug.Print Left$(s$, cnt); cnt

lyscser 发表于 2011-3-24 11:11:03

直接用environment不行么,不见得robot用了QTP也一样用啊

风雪夜归人 发表于 2011-3-24 11:18:10

print Environment.Value("UserName")

willturner 发表于 2011-3-24 11:18:54

lyscser 兄说得对,有点绕远了。。。

不过这个算不算一个QTP的bug,哈哈

willturner 发表于 2011-3-24 11:25:06

也谢谢风雪夜归人:)
页: [1]
查看完整版本: 关于使用Extern对象得到机器的当前登陆用户名