1

ローカル コンピューター上のすべてのユーザー プロファイルを列挙し、それらをコンボ ボックスに一覧表示する必要があります。特別なアカウントは除外す​​る必要があります。アプリが実行されているコンピューターの実際のユーザー プロファイルだけが気になります。いくつかの検索を行いましたが、明確な回答がどこにも投稿されていません。動作する可能性のあるコードをいくつか見つけましたが、SelectQuery と ManagementObjectSearcher が VS でエラーを表示しており、これを動作させるために何をする必要があるかわかりません。

using System.Management;

SelectQuery query = new SelectQuery("Win32_UserAccount");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject envVar in searcher.Get())
{
     Console.WriteLine("Username : {0}", envVar["Name"]);
}
4

2 に答える 2

1

上記のコードは素晴らしいですが、Active Directory ドメインに接続されたマシンで試したところ、ドメインのすべてのユーザー名が返されました。コードを少し調整して、現在のマシンに実際にローカル ディレクトリを持っているユーザーのみを返すことができました。より優れた C# 開発者がコードをリファクタリングしてクリーンにすることができる場合は、助けてください!

var localDrives = Environment.GetLogicalDrives();
var localUsers = new List<string>();
var query = new SelectQuery("Win32_UserAccount") { Condition = "SIDType = 1 AND AccountType = 512" };
var searcher = new ManagementObjectSearcher(query);

foreach (ManagementObject envVar in searcher.Get())
{
    foreach (string drive in localDrives)
    {
        var dir = Path.Combine(String.Format("{0}Users", drive), envVar["name"].ToString());
        if (Directory.Exists(dir))
        {
            localUsers.Add(envVar["name"].ToString());
        }
    }
}

localUsers 変数を取得したら、これを選択した ComboBox コントロールのデータ ソースとして設定できます。

于 2016-05-05T20:55:45.987 に答える
1

「SelectQuery と ManagementObjectSearcher がエラーを表示しています」と言うと、System.Managementdll を参照していないと思います。ソリューションでReferences
を右クリックし、 System.Managementを追加する必要があります。 次に、あなたのステートメントで、エラーが消えるはずです。
using

とにかく、次回エラーを含めると、誰もがあなたを助けるのに役立ちます:)

于 2013-01-31T21:05:37.050 に答える