投稿日 | : 2006/12/25(Mon) 19:06 |
投稿者 | : kishitatsu |
Eメール | : |
URL | : |
タイトル | : API使用によるユーザ名取得がうまくいきません |
いつもお世話になります。
API:GetUserName を使用しログインユーザ名をテキストファイルに
出力するプログラムにおいてテストしても、"SYSTEM"しか取得できません。
実際にログインユーザ名が取得できたのは、直接EXEを実行した時のみでした。
API:WNetGetUserNameでも同様の結果でした。
起動はATコマンドにて直接EXEを時間指定して実行し、確認したのですが…
よろしくご教授の程、お願い致します。
コンパイル環境:VB5.0 SP3
実行環境:Windows XP SP2
【API:GetUserName利用のコード】
Private Declare Function GetUserName Lib "advapi32.dll" _
Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Type Fld1 'LOGファイル
LOG_DateTime As String * 19
LOG_ComputerName As String * 15
LOG_UserName As String * 15
LOG_Execute As String * 20
LOG_CRLF As String * 1
End Type
Private LOG_Rec As Fld1
Private Sub Form_Load()
Dim strBuffer As String 'ユーザ名を格納
Dim lngGetUser As Long '関数戻り値
Dim strUserName As String 'ユーザ名
FILENUM = FreeFile()
Open "D:\TEST\LogOnUserInfo.txt" For Random As FILENUM Len = 71
With LOG_Rec
If 19 - Len(Format(Now, "yyyy/mm/dd hh:mm:ss")) < 0 Then
.LOG_DateTime = Format(Now, "yyyy/mm/dd hh:mm:ss")
Else
.LOG_DateTime = Format(Now, "yyyy/mm/dd hh:mm:ss") & Space$(19 - Len(Format(Now, "yyyy/mm/dd hh:mm:ss")))
End If
If 15 - Len(Environ("COMPUTERNAME")) < 0 Then
.LOG_ComputerName = Environ("COMPUTERNAME")
Else
.LOG_ComputerName = Environ("COMPUTERNAME") & Space$(15 - Len(Environ("COMPUTERNAME")))
End If
.LOG_CRLF = vbCrLf
End With
'バッファのクリア
strBuffer = Space$(255)
lngGetUser = GetUserName(strBuffer, 255)
If lngGetUser = 1 Then
'ユーザ名を格納したバッファからユーザ名文字列を抽出
strUserName = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
With LOG_Rec
If 15 - Len(strUserName) < 0 Then
.LOG_UserName = strUserName
Else
.LOG_UserName = strUserName & Space$(15 - Len(strUserName))
End If
End With
Else
If 15 - Len(lngGetUser) < 0 Then
LOG_Rec.LOG_UserName = lngGetUser
Else
LOG_Rec.LOG_UserName = lngGetUser & Space$(15 - Len(lngGetUser))
End If
End If
Put #FILENUM, 1, LOG_Rec
Close #FILENUM
Unload Me
End Sub