ログオン中のユーザー名を取得するVBScriptサンプルです。
プログラムで、ログオン中のユーザー名を取得する必要のあるケースというのは、どんなケースが考えられるでしょうか?
個人利用のパソコンでは、ユーザー名が重要になるケースというのは少ないかも知れません。例えば、普段は自動ログオンしているため、ユーザー名を気にしないが、ちょっと調べたいとき…でしょうか。いえ、違いますね。そんなときは CTRL+ALT+DEL を押すだけで、現在ログオン中のユーザー名を調べることができます。
私の経験で言えば、プログラムからユーザー名を取得したいケースというのは、主に企業内LAN(イントラネット)で使われている端末で発生することが多いです。企業のポリシーによって異なりますが、ユーザー名=メールアドレスだったり、社内文書の署名にユーザー名を使っているところもあります。そこで、こんな例を考えてみます。
ケーススタディ
○×商事では、各部署で業務上必要な機器を購入する際に、申請管理システム(Windowsアプリケーション)で機器購入申請書の入力をする決まりになっています。しかし、申請者欄が手動入力のためか、入力ミスが多く、部署/申請者ごとの機器購入状況を集計する際に問題が生じています。そこで、申請者欄の入力ミスをなくすため、各クライアントPCでログオンする際のユーザー名を自動的に申請者欄へセットし、入力者が変更できないようにしたいと考えています。
いかがでしょうか? 色々とツッコミどころがあるかも知れませんが、とりあえず、雰囲気を掴んで頂ければ結構です。こういったケースであれば、プログラムから、ユーザー名を取得する必要性が生じますよね。
では、長い前置きはこのくらいにして、VBScriptによるサンプルです。
'*************************************************************
'* ログオン中のユーザー名を取得するサンプル
'*
'*************************************************************
Option Explicit
Dim strComputerName, strSQL, strMsg
Dim objCSs, objCS
strComputerName = "\\." '//ローカルコンピュータを選択
strSQL = "select * from Win32_ComputerSystem"
Set objCSs = GetObject("winmgmts:{impersonationLevel=impersonate}!" & strComputerName & "\root\cimv2").ExecQuery(strSQL)
strMsg = ""
For Each objCS In objCSs
strMsg = strMsg & "コンピュータ名:" & objCS.Name & vbCrLf
strMsg = strMsg & "ユーザー名:" & objCS.UserName & vbCrLf
Next
Set objCSs = Nothing
WScript.Echo strMsg
Visual C/C++, Visual Basic 等で作成されるWindowsアプリケーションであれば、Windows APIを呼び出して、ユーザー名を取得することも可能ですが、今回は、より汎用的にするために、VBScriptから WMI (Windows Management Instrumentation) サービスを利用する仕組みにしてみました。このサンプルであれば、OfficeのVBAでも利用可能な点がポイントです。
WMIサービスとは、システム管理情報を提供するサービスであり、Windows 2000以降であれば、デフォルトで組み込まれています(一応、Windows NT 4.0でもWMIを組み込むことは可能です)。WMIサービスの面白い点は、SQL文によって、様々なシステム管理情報を引き出すことができる点です。今回の例では、"select * from Win32_ComputerSystem"の部分ですが、Win32_ComputerSystemというテーブル(?)を読み、コンピュータ名とログオン中のユーザー名を表示しています。この Win32_ComputerSystem には、他にも様々なプロパティがあるので、興味のある方は、関連リンクから、MSDNを参照してみると良いでしょう。
関連リンク
Win32_ComputerSystem
MSDN(英語)
記事がお役にたちましたら、ポチっとお願いします m(_ _)m →
Last updated
December 12, 2005 20:29:17