C# 将每个 wlan 配置文件存储在一个 ObservableCollection 中
C# store each wlan profile in an ObservableCollection
我必须将每个配置文件名称存储在一个 Observable 集合中,但我不知道该怎么做,我做了这个项目的很大一部分,但它是如何访问我不知道的每个配置文件名称不知道怎么办。
我看到有人在使用 Substrings 和 IndexOf,我试过了,但问题是我要显示的配置文件名称不止一个,所以这不起作用。
我遵循了这个教程:https://www.youtube.com/watch?v=Yr3nfHiA8Kk但是它展示了如何使用当前连接的 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;
目前我没有办法对此进行测试,但根据您在图像中显示的输出,您似乎可以获取所有输出,将其拆分为单独的行,拆分每一行在 ':'
字符上,然后 select 该拆分的第二部分以获取名称。
但首先,我认为 show
的参数是 "profiles"
(复数),根据其中一条评论,您可能需要使用 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()
将其全部作为字符串获取:
var output = p.StandardOutput
// Get all the output
.ReadToEnd()
// Split it into lines
.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
// Split each line on the ':' character
.Select(line => line.Split(new[] {':'}, StringSplitOptions.RemoveEmptyEntries))
// Get only lines that have something after the ':'
.Where(split => split.Length > 1)
// Select and trim the value after the ':'
.Select(split => split[1].Trim());
现在我们有了 IEnumerable<string>
个名称,我们可以用它来初始化我们的集合:
var reseaux = new ObservableCollection<string>(output);
我必须将每个配置文件名称存储在一个 Observable 集合中,但我不知道该怎么做,我做了这个项目的很大一部分,但它是如何访问我不知道的每个配置文件名称不知道怎么办。
我看到有人在使用 Substrings 和 IndexOf,我试过了,但问题是我要显示的配置文件名称不止一个,所以这不起作用。
我遵循了这个教程:https://www.youtube.com/watch?v=Yr3nfHiA8Kk但是它展示了如何使用当前连接的 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;
目前我没有办法对此进行测试,但根据您在图像中显示的输出,您似乎可以获取所有输出,将其拆分为单独的行,拆分每一行在 ':'
字符上,然后 select 该拆分的第二部分以获取名称。
但首先,我认为 show
的参数是 "profiles"
(复数),根据其中一条评论,您可能需要使用 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()
将其全部作为字符串获取:
var output = p.StandardOutput
// Get all the output
.ReadToEnd()
// Split it into lines
.Split(new[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
// Split each line on the ':' character
.Select(line => line.Split(new[] {':'}, StringSplitOptions.RemoveEmptyEntries))
// Get only lines that have something after the ':'
.Where(split => split.Length > 1)
// Select and trim the value after the ':'
.Select(split => split[1].Trim());
现在我们有了 IEnumerable<string>
个名称,我们可以用它来初始化我们的集合:
var reseaux = new ObservableCollection<string>(output);