Windowsのユーザーはユーザー名(ログオン時に使用されるアカウント名)により識別されるが、ユーザー情報の一部としてそのユーザーの「フル・ネーム」を設定することができる。これは「表示名」とも呼ばれ、例えばWindows XPなどでは、[スタート]メニューの一番上の部分でユーザーの名前*を表示するのに使用されている。
* フル・ネームが設定されていない場合には[スタート]メニューにもユーザー名が表示される。フル・ネームの設定内容は「net user ユーザー名」や「net user ユーザー名 /domain」などのコマンドにより「フル ネーム」の項目から確認できる(前者はローカル、後者はドメインの情報をそれぞれ表示)。
本稿では、このフル・ネーム(表示名)をプログラムで取得する方法について解説する。
ユーザー名/ドメイン名の取得
フル・ネームを取得するには、ユーザー名とそのユーザーが登録されているドメインの名前(PCがドメインに参加していない場合にはコンピュータ名)がまず必要になる。
これらについては取得のためのプロパティがEnvironmentクラス(System名前空間)に用意されており、現在のユーザーのユーザー名は、EnvironmentクラスのUserNameプロパティから取得できる。
同様に、そのユーザーが属するドメインの名前(PCがドメインに参加していない場合にはコンピュータ名)は、EnvironmentクラスのUserDomainNameプロパティから取得できる。
以下にその記述例を示す。
string uName = Environment.UserName;
string domain = Environment.UserDomainName;
Dim uName As String = Environment.UserName
Dim domain As String = Environment.UserDomainName
フル・ネーム(表示名)の取得
フル・ネームに関しては、それを直接取得できるプロパティなどは用意されておらず、ユーザー名/ドメイン名を用いてActive Directoryに問い合わせる必要がある(ただし、必ずしもActive Directoryに参加している必要はない)。
Active Directoryへの問い合わせには、ADSI(Active Directory Service Interfaces)という仕組みがWindowsに用意されているが、.NET Frameworkのクラス・ライブラリでは、DirectoryEntryクラス(System.DirectoryServices名前空間)がこのADSIを実装している。
以下のコードはドメイン「myDomain」のユーザー「myName」のフル・ネームを取得するためのコード例である。
string path = "WinNT://myDomain/myName";
DirectoryEntry dirEnt = new DirectoryEntry(path)
string dName = dirEnt.Properties["FullName"].Value.ToString();
Dim path As String = "WinNT://myDomain/myName"
Dim dirEnt As DirectoryEntry = New DirectoryEntry(path)
Dim dName As String = dirEnt.Properties("FullName").Value.ToString()
ここではドメイン「myDomain」のユーザー「myName」のフル・ネームを取得している。
Active Directoryはツリー構造で情報を格納しており、DirectoryEntryクラスでは特定のエントリ(ノード)の位置を「WinNT://〜」の形式で指定できる。各エントリはプロパティのセットであり、Propertiesプロパティを使って各プロパティの値を取得できる。
フル・ネームを表示するサンプル・プログラム
次のコードは、上記2つの手順を組み合わせることにより、現在のユーザーのフル・ネームを表示するサンプル・プログラムである。
// displayname.cs
using System;
using System.DirectoryServices;
class DisplayName {
static void Main() {
string domain = Environment.UserDomainName; // ドメイン名
string uName = Environment.UserName; // ユーザー名
string path = "WinNT://" + domain + "/" + uName;
string dName;
using (DirectoryEntry dirEnt = new DirectoryEntry(path))
{
// フル・ネーム
dName = dirEnt.Properties["FullName"].Value.ToString();
}
Console.WriteLine(domain); // 出力例:D-ADVANTAGE
Console.WriteLine(uName); // 出力例:taka-e
Console.WriteLine(dName); // 出力例:ENDOH, Takanobu
}
}
// コンパイル方法:csc displayname.cs
displayname.csのダウンロード
' displayname.vb
Imports System
Imports System.DirectoryServices
Class DisplayName
Shared Sub Main()
Dim domain As String = Environment.UserDomainName ' ドメイン名
Dim uName As String = Environment.UserName ' ユーザー名
Dim path As String = "WinNT://" + domain + "/" + uName
Dim dName As String
Using dirEnt As DirectoryEntry = new DirectoryEntry(path)
' フル・ネーム
dName = dirEnt.Properties("FullName").Value.ToString()
End Using
Console.WriteLine(domain) ' 出力例:D-ADVANTAGE
Console.WriteLine(uName) ' 出力例:taka-e
Console.WriteLine(dName) ' 出力例:ENDOH, Takanobu
End Sub
End Class
' コンパイル方法:vbc displayname.vb
displayname.vbのダウンロード
このサンプル・プログラムは、ドメイン名/ドメイン・ユーザー名/フル・ネーム、あるいはドメインに参加していない場合には、コンピュータ名/ローカル・ユーザー名/フル・ネームを表示する。
カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:Environmentクラス(System名前空間)
使用ライブラリ:DirectoryEntryクラス(System.DirectoryServices名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.