3

我在 VBS 中有以下代码可以完美运行。它查询 AD 以获取用户全名:

Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
strFullName = objUser.Get("displayName")
MsgBox strFullName

我想做同样的瘦,但在 Foxpro 7 中。有人有使用 VFP 7 或 9 的经验吗?

4

4 回答 4

3

sys(0) 返回机器名称和用户,例如

lcMachineUser = sys(0)
lcMachine = LEFT( lcMachineUser, AT( "#", lcMachineUser) -1 )
lcUserName = substr( lcMachineUser, AT( "#", lcMachineUser) +1 )
于 2013-01-30T16:18:28.163 回答
2

这将从环境变量中获取用户名。

username = GETENV("UserName")
于 2013-01-31T14:45:08.873 回答
2

好吧,看起来这些东西已经很老了……这是真的!;) 我找到了一个解决方案,但是,这可以帮助某人,某处,某天:)

loScript = Createobject("MSScriptcontrol.scriptcontrol.1")
loScript.Language = "VBScript"

TESTVBS = [Set objSysInfo = CreateObject("ADSystemInfo")] + chr(13)+chr(10)+;
          [strUser = objSysInfo.UserName] + chr(13)+chr(10)+;
          [Set objUser = GetObject("LDAP://" & strUser)] + chr(13)+chr(10)+;
          [strFullName = objUser.Get("displayName")] + chr(13)+chr(10)
          *[MsgBox strFullName]

loScript.executestatement(TESTVBS)

这就是您从 Foxpro 代码执行 VBS 的方式...两种不再是技术的技术 :)

于 2013-01-29T17:23:17.083 回答
0

我正在使用这个功能:

FUNCTION Get_User()
  LOCAL cUsrBuf, nUsrLen, cUserName
  cUsrBuf = SPACE(20)
  nUsrLen = 20
  DECLARE GetUserName IN advapi32 AS GetUserName STRING @cusrbuf, LONG @nusrlen
  =GetUserName(@cusrbuf, @nusrlen)
  cUserName = LEFT(ALLTRIM(cusrbuf), LEN(ALLTRIM(cusrbuf)) - 1)
 RETURN cUserName
ENDFUNC

我会避免使用 SYS(0),因为:在独立环境中使用 Visual FoxPro 时,SYS(0) 返回 1

只有当机器连接到网络时,SYS(0) 才会返回机器名称、一个空格、一个数字符号 (#),然后是另一个空格,然后是当前用户的 id(或 Visual FoxPro 所在的安全上下文)在跑)。

于 2013-03-01T07:09:26.647 回答