Heenan, Lambert
Lambert.Heenan at AIG.com
Tue Jun 12 10:16:14 CDT 2007
It's unreliable because the setting of the environment variables is dependant of the local computer administrators' decision. In some shops they set the variables in login scripts, in others they don't. So you can never be certain that Environ is going to return a value. The API calls should always work. Here's some code... Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare Function apiGetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Function fOSUserName() As String ' Returns the network login name, or if this is a secured database, the CurrentUser Dim lngLen As Long, lngX As Long Dim strUserName As String If CurrentUser <> "Admin" Then ' If we have logged in to a secure database fOSUserName = CurrentUser Else strUserName = String$(254, 0) lngLen = 255 lngX = apiGetUserName(strUserName, lngLen) If lngX <> 0 Then strUserName = left$(strUserName, lngLen - 1) fOSUserName = strUserName Else fOSUserName = "" End If End If End Function '******************** Code Start ************************** 'This code was originally written by Dev Ashish. 'It is not to be altered or distributed, 'except as part of an application. 'You are free to use it in any application, 'provided the copyright notice is left unchanged. ' 'Code courtesy of 'Dev Ashish Function fOSMachineName() As String 'Returns the computername Dim lngLen As Long, lngX As Long Dim strCompName As String lngLen = 16 strCompName = String$(lngLen, 0) lngX = apiGetComputerName(strCompName, lngLen) If lngX <> 0 Then fOSMachineName = left$(strCompName, lngLen) Else fOSMachineName = "" End If End Function -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of John Bartow Sent: Tuesday, June 12, 2007 10:56 AM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Track PC Number I'm pretty sure that there's not a Mac version of Access. I'm assuming the help reference was for Word, Excel or PowerPoint. This is the first I've noticed the Environ() function. Seems like it would save a lot of coding in lieu of the half a dozen Windows API calls I use to do what it can do. I was just wondering if it was unreliable that there are so many people using and posting API calls to do the same thing. (I certainly didn't write the API calls I'm using!) -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Heenan, Lambert Sent: Tuesday, June 12, 2007 8:49 AM To: 'Access Developers discussion and problem solving' Subject: Re: [AccessD] Track PC Number The Environ() function has been available is all versions of Access since 1.0, but that's in a Windows setting. Are you running Access on a Mac in a Windows emulator? In which case Environ should work, but only if your virtual windows machine actually sets an environment variable called UserName and/or another one called ComputerName. Those variables are typically set by login scripts. If they are not set then you have to use the API calls to retrieve the information. If you are running the native Mac version of Access (is there such a beast?) then I can offer no help, not knowing any Mac APIs. Lambert -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com