2012-01-24 8 views
3

私は、Accessアプリケーションでユーザー名を取得する方法が少なくとも2種類あることを知っています。environ( "username")対advapi32.dll

あなたは環境の機能を使用することができます。

environ("username") 

そして、あなたは、上記の方法のいずれかを使用するのが最も安全であるのAdvapi32.dll

Public Declare Function GetUserName& Lib "advapi32.dll" Alias _ 
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) 

s = String(l, Chr(32)) 
GetUserName s, l 
username = Left$(s, l - 1) 

でGetUsernameを使用することができますか?なぜ?

おそらく、いくつかの背景情報は、アプリケーションがローカルコンピュータとリモートデスクトップの両方で使用されています。

答えて

5

サイモンが言ったように、ENVIRON変数は操作に開かれている、しかし、一部の人々はまた、API呼び出しを避けるのが好き、これが事実であるならば、これは代替従うことは簡単です:除く

Public Function GetUser() As String 

    Dim WNet As Object 

    Set WNet = CreateObject("WScript.Network") 

    GetUser = WNet.UserName 

    Set WNet = Nothing 

End Function 
+1

+1 WNetは範囲外になると破壊されるので、私は 'Set Nothing'ステートメントをスキップします。 – JimmyPena

+0

@JPああ、私はそれを知らなかった:) –

2

環境変数は誰でも設定したり解除したりすることができますが、誰かがエラーの原因と考える場合でも、これらのケースは再現するのが難しい傾向があります。

私はadvapiに間違いなく行きます。

関連する問題