Environment.UserName で簡単に見つけることができるアカウント名ではなく、c# で現在ログインしているユーザーの名前を取得しようとしています。エクスプローラーのように MyComputer のフォルダーを列挙したいと思います。どうすればそれを行うことができますか、またはユーザーの正しい名前を取得する別の方法はありますか?
前もって感謝します。
Environment.UserName で簡単に見つけることができるアカウント名ではなく、c# で現在ログインしているユーザーの名前を取得しようとしています。エクスプローラーのように MyComputer のフォルダーを列挙したいと思います。どうすればそれを行うことができますか、またはユーザーの正しい名前を取得する別の方法はありますか?
前もって感謝します。
使用してみてください:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
これにより、現在ログインしているユーザーのアカウントとその名前が返されます。
ユーザー名の変更後にそれが機能しない場合、別の方法として、現在のユーザーの SID を取得し、その SID に一致するユーザー名を検索します。
using System.Security.Principal;
string sid = WindowsIdentity.GetCurrent().Owner.ToString();
return new SecurityIdentifier(sid).Translate(typeof(NTAccount)).ToString();
これに失敗した場合は、SID を取得し、WMI またはレジストリを介して一致するユーザーを探します。これを手動で行う方法については、http: //pcsupport.about.com/od/registry/ht/find-user-security-identifier.htmを参照してください。
これらのメソッドのいずれかが新しいユーザー名を返すことを手動で確認できる場合は、WMI 呼び出しまたはレジストリ アクセスのいずれかを使用してコードに実装します。
これを使って 、
string windowLoging = WindowsIdentity.GetCurrent().Name;
また
string windowsLogin = Page.User.Identity.Name;
また
string windowsLogin = Environment.GetEnvironmentVariable("USERNAME");
@ damienc88あなたのリンクは私を解決策に導きます:
SelectQuery query = new SelectQuery("Win32_UserAccount", string.Format("Domain='{0}'", Environment.MachineName));
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mObject in searcher.Get())
{
Console.WriteLine((string)mObject["Name"] + "\t" + (string)mObject["FullName"]);
}
「FullName」は私が検索したプロパティです。どうもありがとう。– ハラルド・ピトロ