[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

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

投稿時間:2006/12/25(Mon) 19:37
投稿者名:もげ
Eメール:
URL :
タイトル:
Re: API使用によるユーザ名取得がうまくいきません
それはVBとは無関係の問題に見えます。

> API:GetUserName を使用しログインユーザ名をテキストファイルに
> 出力するプログラムにおいてテストしても、"SYSTEM"しか取得できません。

ATコマンドの実行ユーザは、
スケジュールを司るサービスのログオンアカウントで固定だったような...。

> 実際にログインユーザ名が取得できたのは、直接EXEを実行した時のみでした。
> API:WNetGetUserNameでも同様の結果でした。

であれば、正常かと思われます。

> 起動はATコマンドにて直接EXEを時間指定して実行し、確認したのですが…

Win2000以降であれば、かわりにタスクスケジューラを使用して、
実行時ユーザ名を指定してテストしてみてはいかがでしょう。

投稿時間:2006/12/26(Tue) 16:31
投稿者名:kishitatsu
Eメール:
URL :
タイトル:
Re^2: API使用によるユーザ名取得がうまくいきません
> それはVBとは無関係の問題に見えます。
>
> > API:GetUserName を使用しログインユーザ名をテキストファイルに
> > 出力するプログラムにおいてテストしても、"SYSTEM"しか取得できません。
>
> ATコマンドの実行ユーザは、
> スケジュールを司るサービスのログオンアカウントで固定だったような...。
>
> > 実際にログインユーザ名が取得できたのは、直接EXEを実行した時のみでした。
> > API:WNetGetUserNameでも同様の結果でした。
>
> であれば、正常かと思われます。
>
> > 起動はATコマンドにて直接EXEを時間指定して実行し、確認したのですが…
>
> Win2000以降であれば、かわりにタスクスケジューラを使用して、
> 実行時ユーザ名を指定してテストしてみてはいかがでしょう。

ご回答ありがとうございます。

ご指摘のタスクスケジューラを使用して実行時ユーザ名を指定してテストしても
同じようにログインユーザ名でなく、実行時ユーザ名が格納されてしまいます。
仕方なくXP,NTの各マシンのALL USERSのスタートアップに直接exeを格納することにより
うまく行くことが確認できました。
ただ、今度はその出力されたテキストファイルをログオフ時に削除したいのですが
何か方法はないでしょうか?
よろしくお願い致します。

投稿時間:2006/12/26(Tue) 18:00
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: API使用によるユーザ名取得がうまくいきません
> ただ、今度はその出力されたテキストファイルをログオフ時に削除したいのですが

ログオフスクリプトを利用してみるとか。
http://support.microsoft.com/kb/322241/ja

投稿時間:2006/12/26(Tue) 19:03
投稿者名:kishitatsu
Eメール:
URL :
タイトル:
Re^4: API使用によるユーザ名取得がうまくいきません
> > ただ、今度はその出力されたテキストファイルをログオフ時に削除したいのですが
>
> ログオフスクリプトを利用してみるとか。
> http://support.microsoft.com/kb/322241/ja

魔界の仮面弁士さん、この掲示板上、いつもお世話になっております。

テスト環境はWindows2000Serverのドメイン配下のXP:2台,NT:3台です。
ご指摘のページを参考に明日テストしてみます。
ありがとうございます。

投稿時間:2006/12/27(Wed) 15:48
投稿者名:kishitatsu
Eメール:
URL :
タイトル:
Re^5: API使用によるユーザ名取得がうまくいきません
> > > ただ、今度はその出力されたテキストファイルをログオフ時に削除したいのですが
> >
> > ログオフスクリプトを利用してみるとか。
> > http://support.microsoft.com/kb/322241/ja
>
> 魔界の仮面弁士さん、この掲示板上、いつもお世話になっております。
>
> テスト環境はWindows2000Serverのドメイン配下のXP:2台,NT:3台です。
> ご指摘のページを参考に明日テストしてみます。
> ありがとうございます。

サーバー管理者不在の為、テストは年明けになりそうです。
すみませんが、それ以降にテストしますので何かありましたら
またご教授お願いします。

投稿時間:2007/01/25(Thu) 10:30
投稿者名:kishitatsu
Eメール:
URL :
タイトル:
Re^6: API使用によるユーザ名取得がうまくいきません
> > > > ただ、今度はその出力されたテキストファイルをログオフ時に削除したいのですが
> > >
> > > ログオフスクリプトを利用してみるとか。
> > > http://support.microsoft.com/kb/322241/ja
> >
> > 魔界の仮面弁士さん、この掲示板上、いつもお世話になっております。
> >
> > テスト環境はWindows2000Serverのドメイン配下のXP:2台,NT:3台です。
> > ご指摘のページを参考に明日テストしてみます。
> > ありがとうございます。
>
> サーバー管理者不在の為、テストは年明けになりそうです。
> すみませんが、それ以降にテストしますので何かありましたら
> またご教授お願いします。

お世話になります。

昨年末にてサーバー管理者、退職してしまたった為、誰も引き継いでないようで
自己解決することとなりました。
ActiveDirectory,グループポリシーについて勉強しながらテストしてます。
現状うまくいってませんが、この掲示板の趣旨から
はずれる質問内容となってしまいますので、これで完了とさせて頂きます。

ありがとうございました。