GetUserName関数は、WindowsAPIの一部であり、Windowsオペレーティングシステム上で実行されているプログラムから、現在ログインしているユーザーの名前を取得するために使用されます。
API宣言
ExcelVBAでは、GetUserName関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。
(ByVal lpBuffer As String, nSize As Long) As Long
解説
パラメータ | 内容 |
Lib | 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "advapi32.dll"となります。 |
Alias | API関数名を指定します。ここでは"GetUserNameA"という関数名が指定されています。 |
引数については以下の通りです。
引数 | 内容 |
lpBuffer | ログオンしているユーザーのユーザー名が格納される文字列へのポインタです。この引数には、関数が呼び出される前に十分なメモリが確保されている必要があります。関数が成功すると、この文字列にユーザー名が格納されます。 |
nSize | lpBufferが指すバッファのサイズを指定します。バイト単位でのサイズを表す整数型です。関数が呼び出されると、nSizeに実際に必要なサイズが格納されます。もしlpBufferがNULLの場合、この引数は無視されます。バッファが十分なサイズでない場合、関数はERROR_INSUFFICIENT_BUFFERを返し、nSizeに必要なサイズが格納されます。 |
使い方
GetUserName関数を使用して、現在ログインしているユーザーの名前を取得するための手順です。
1.API宣言を行う
(ByVal lpBuffer As String, nSize As Long) As Long
2.バッファを作成する
Dim bufferSize As Long
bufferSize = 255
userName = Space(bufferSize)
※このコードでは、255文字分のバッファを作成しています。Space関数は、指定された数のスペースで構成される文字列を返します。この場合、バッファの初期値として使用されます。
3.GetUserName関数を呼び出す
result = GetUserName(userName, bufferSize)
※このコードでは、GetUserName関数を呼び出して、現在ログインしているユーザーの名前をバッファに格納します。関数が成功すると、TRUEが返され、バッファにユーザー名が格納されます。
4.バッファからユーザー名を取得する
userName = Left(userName, InStr(userName, Chr(0)) - 1)
MsgBox "Current user: " & userName
Else
MsgBox "Failed to get the current user name"
End If
※このコードでは、GetUserName関数が成功した場合、バッファからユーザー名を取得します。Left関数は、指定された文字列の左端から指定された数の文字列を返します。InStr関数は、指定された文字列内で指定された文字列が最初に出現する位置を返します。この場合、Chr(0)は、NULL文字を表します。バッファ内のNULL文字以降の文字列は、無視されます。
プログラミング例
以下は、GetUserName関数を使用して、現在ログインしているユーザーの名前を取得するための完全なプログラム例です。
(ByVal lpBuffer As String, nSize As Long) As Long
Sub GetCurrentUserName()
Dim userName As String
Dim bufferSize As Long
Dim result As Long
bufferSize = 255
userName = Space(bufferSize)
result = GetUserName(userName, bufferSize)
If result = 1 Then
userName = Left(userName, InStr(userName, Chr(0)) - 1)
MsgBox "Current user: " & userName
Else
MsgBox "Failed to get the current user name"
End If
End Sub
このコードを実行すると、現在ログインしているユーザーの名前が表示されます。
まとめ
Windowsプログラミングを学ぶ場合、API関数の使用方法を理解することが非常に重要です。GetUserName関数を使用することで、現在ログインしているユーザーの名前を簡単に取得できるだけでなく、WindowsAPI関数の使用方法について学ぶことができます。より高度なWindowsプログラミングに進むためには、より高度なAPI関数やWin32 APIを学習する必要があります。