如何为每个应用程序只获得一个结果而不是两个?
How do I get only one result for each app instead of double?
将此复制到 Visual Studio,添加一个文本框,它将 运行。
Const NET_FW_ACTION_ALLOW = 1
Dim fwPolicy2 = CreateObject("HNetCfg.FwPolicy2")
Dim RulesObject = fwPolicy2.Rules
For Each rule In RulesObject
If rule.action = NET_FW_ACTION_ALLOW Then
TextBox1.Text += rule.name & vbnewline
End If
Next
这是我得到的示例,但我只需要列出每个应用程序一次,而不是两次。我做错了什么或者为什么会这样?
qBittorrent
qBittorrent
Chrome
Chrome
Visual Studio
Visual Studio
and so on...
For Each rule In RulesObject
If rule.action = NET_FW_ACTION_ALLOW AndAlso TextBox1.Text.Contains(rule.name.ToString) = False Then
TextBox1.Text += rule.name & vbnewline
End If
Next
以上是一种方法。它只是检查它是否已经添加到文本框中。顺便说一句,我不知道 rule.name
是否已经是一个字符串所以我添加了 .ToString
;如果它已经是一个字符串,则不需要添加它。
此外,我们大多数人会推荐使用 Option Strict
,并将变量声明为类型。即 Dim myVar as String = "some string"
之所以如此,是因为 rule.Name
不是防火墙规则的唯一标识符。相同的规则名称可能用于不同的协议(TCP、UDP)、配置文件(domain、private、public)、方向(in、out)等。如果您只对rule.Name
感兴趣,将它们添加到一个集合中,然后打印该集合,如下所示。
Const NET_FW_ACTION_ALLOW = 1
Dim fwPolicy2 = CreateObject("HNetCfg.FwPolicy2")
Dim RulesObject = fwPolicy2.Rules
Dim names As New HashSet(Of String)
' Create set of unique names.
For Each rule In fwPolicy2.Rules
If rule.action = NET_FW_ACTION_ALLOW Then
names.Add(rule.name)
End If
Next
' Add names to TextBox.
For Each name As String In names
TextBox1.Text += name & vbNewLine
Next
将此复制到 Visual Studio,添加一个文本框,它将 运行。
Const NET_FW_ACTION_ALLOW = 1
Dim fwPolicy2 = CreateObject("HNetCfg.FwPolicy2")
Dim RulesObject = fwPolicy2.Rules
For Each rule In RulesObject
If rule.action = NET_FW_ACTION_ALLOW Then
TextBox1.Text += rule.name & vbnewline
End If
Next
这是我得到的示例,但我只需要列出每个应用程序一次,而不是两次。我做错了什么或者为什么会这样?
qBittorrent
qBittorrent
Chrome
Chrome
Visual Studio
Visual Studio
and so on...
For Each rule In RulesObject
If rule.action = NET_FW_ACTION_ALLOW AndAlso TextBox1.Text.Contains(rule.name.ToString) = False Then
TextBox1.Text += rule.name & vbnewline
End If
Next
以上是一种方法。它只是检查它是否已经添加到文本框中。顺便说一句,我不知道 rule.name
是否已经是一个字符串所以我添加了 .ToString
;如果它已经是一个字符串,则不需要添加它。
此外,我们大多数人会推荐使用 Option Strict
,并将变量声明为类型。即 Dim myVar as String = "some string"
之所以如此,是因为 rule.Name
不是防火墙规则的唯一标识符。相同的规则名称可能用于不同的协议(TCP、UDP)、配置文件(domain、private、public)、方向(in、out)等。如果您只对rule.Name
感兴趣,将它们添加到一个集合中,然后打印该集合,如下所示。
Const NET_FW_ACTION_ALLOW = 1
Dim fwPolicy2 = CreateObject("HNetCfg.FwPolicy2")
Dim RulesObject = fwPolicy2.Rules
Dim names As New HashSet(Of String)
' Create set of unique names.
For Each rule In fwPolicy2.Rules
If rule.action = NET_FW_ACTION_ALLOW Then
names.Add(rule.name)
End If
Next
' Add names to TextBox.
For Each name As String In names
TextBox1.Text += name & vbNewLine
Next