如何在 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。 nSizeis 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 中检索长二进制数据(图像)

无法从 Access DB 查询中检索数据到我的 VB 程序

如何使用VB.NET在Access数据库中插入多条记录