如何在 VB 中检索 64 位/Access 2013 的 Windows 用户 ID?
Posted
技术标签:
【中文标题】如何在 VB 中检索 64 位/Access 2013 的 Windows 用户 ID?【英文标题】:How to retrieve Windows userID in VB for 64-bit/Access 2013? 【发布时间】:2013-05-30 23:37:59 【问题描述】:我需要获取代码来检索 64 位系统上 VB(用于 Access 2013)中当前会话的 Windows 用户 ID。
我已经尝试了How to get logged-in user's name in Access vba? 建议的解决方案,但显然这在我的 64 位机器上不起作用。我也想知道如何整合http://msdn.microsoft.com/en-us/library/office/gg278832.aspx的信息,但我想不通。
我是一个新手 VB 程序员,所以我真的需要实际的代码来做这件事。 (在我看到代码之后,我 [可能] 可以弄清楚代码是如何以及为什么会这样做的,但目前我无法从头开始。)
我希望这个答案也对其他人有所帮助。
非常感谢!
阿罗哈, -pt
【问题讨论】:
【参考方案1】:您链接到的答案适用于 32 位版本的访问。对于 64 位版本,您需要使用指针安全签名:
Private Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias
"GetUserNameA" (ByVal lpBuffer As String, nSize As LongPtr) As Long
(它可能适用于 nSize As Long
- 我手头没有 64 位访问权限)
【讨论】:
返回值应该是 LongPtr 吗?我对如何处理在 64 位系统上运行的 32 位代码的指针不够熟悉。由于 nSize 是发送到 32 位 DLL 的参数,我很确定最好将其保留为 Long。nSize
is LPDWORD
。不管位数,都是ByRef nSize As Long
。【参考方案2】:
这也应该有效:
Dim wshNet As Object
Set wshNet = CreateObject("WScript.Network")
MsgBox "Hello, " & wshNet.UserName & "!"
Set wshNet = Nothing
【讨论】:
以上是关于如何在 VB 中检索 64 位/Access 2013 的 Windows 用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Access 数据库 VB.net 中检索特定数据?
如何在 VB.net 中使用 ROWNUM 从 MS-Access 数据库中检索数据
ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录
使用 VB.NET 从 Access 中检索长二进制数据(图像)