投稿時間: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
|