C# C将每个wlan配置文件存储在ObservableCollection中

C# C将每个wlan配置文件存储在ObservableCollection中,c#,wifi,netsh,ssid,C#,Wifi,Netsh,Ssid,我必须将每个配置文件名存储在一个可观察的集合中,但我不知道如何做到这一点,我在项目中占了很大一部分,但我不知道如何访问每个配置文件名 我看到人们在使用子字符串和IndexOf,我试过了,但问题是我要显示的配置文件名不止一个,所以这不起作用 我遵循了本教程:但它展示了如何使用当前连接的Wifi InitializeComponent(); ObservableCollection<String> reseaux = new ObservableCollectio

我必须将每个配置文件名存储在一个可观察的集合中,但我不知道如何做到这一点,我在项目中占了很大一部分,但我不知道如何访问每个配置文件名

我看到人们在使用子字符串和IndexOf,我试过了,但问题是我要显示的配置文件名不止一个,所以这不起作用

我遵循了本教程:但它展示了如何使用当前连接的Wifi

InitializeComponent();
            ObservableCollection<String> reseaux = new ObservableCollection<String>();

            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = "netsh.exe";
            //p.StartInfo.Arguments = "wlan show interfaces";
            p.StartInfo.Arguments = "wlan show profile";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.Start();

        /*foreach (System.Diagnostics.Process profile in profile)
        {
            reseaux.Add(reseauName);
        }*/

        lesReseaux.ItemsSource = reseaux;

目前我没有办法测试这个,但是根据您在图像中显示的输出,您可以获取所有输出,将其拆分为单独的行,在“:”字符上拆分每行,然后从拆分中选择第二部分以获得名称

但首先,我认为要显示的参数是复数的,根据其中一条注释,您可能需要使用netsh.exe的完整路径。因此,该代码可能如下所示:

var startInfo = new ProcessStartInfo
{
    FileName = Path.Combine(Environment.SystemDirectory, "netsh.exe"),
    Arguments = "wlan show profiles",
    UseShellExecute = false,
    RedirectStandardOutput = true,
};

var p = Process.Start(startInfo);
p.WaitForExit();
在此之后,命令的输出将存储在p.StandardOutput中,这是一个StreamReader,我们可以使用.ReadToEnd以字符串的形式获取它:

现在我们有了一个IEnumerable名称,可以用它初始化集合:

var reseaux = new ObservableCollection<string>(output);

Process类没有任何环境变量,如PATH。因此,您需要输入netsh.exe的完整路径名。它正在工作,我的项目能够找到netsh。要显示的参数不是应该是带有s的配置文件吗?当我打开命令窗口并键入netsh.exe,然后键入wlan show/?时,我看不到配置文件选项。此外,由于您正在重定向输出,您不应该从p.StandardOutput获取数据吗?请参阅msdn以获取StandardOutput。它是一个流,不能通过流或字符串进行枚举。输出可能是多行的,您需要在行尾终止符上拆分。OMG谢谢,我不是这样想的,我确定我需要找到一个包含此信息的文件,我必须去提取它以将其放入我的列表中,因此如果我正确理解您的代码,您可以创建一个列表并将avex中的每一行放入其中?不,我试着在评论中描述它。它将所有输出转换为一个字符串,然后将其拆分为一个行数组,然后对于任何一行,如果该行后面有“:”和其他内容,它将获取该字符后面的部分,并将它们全部返回到一个列表中。因此,它应该是一个配置文件名列表。让我知道它是否有效,因为我无法在手机上测试它
var reseaux = new ObservableCollection<string>(output);