我想允许我的应用程序的用户直接打开(Windows 控制面板)“Internet 协议版本 4 (TCP/IPv4)”属性对话框(见下图),以选择网络连接;要做到这一点,我首先必须确保我可以从 Windows 10 命令行(或cmd.exe
PowerShell)执行相同操作。
这与这个问题中问的基本上相同:
...除了我在这个问题上有稍微多一点的细节,所以我希望我能得到比以下更具结论性的答案:
没有办法直接打开该特定属性窗口。只有一个快捷方式可以打开“通用”接口屏幕,即
ncpa.cpl
。
...这样我就能解决这个问题了。
请注意我不是对如何从命令行更改网络连接设置感兴趣(引用的问题已经有了回答我也不是有兴趣查找打开的窗口,并向其发送虚拟键盘按下/击键(引用的问题已经有了自动键答案;尽管人们也可以从命令行获取所有打开的窗口的列表 进而将键发送到 Powershell 中的活动窗口)
我认为我可以将这个具体问题简化为如何从 Windows 驱动程序 .sys 文件调出对话框窗口。但首先,让我介绍一下到目前为止我可以从命令行执行的操作。其中大部分来自引用的帖子。
首先,我们可以查询注册表以获取实际的网卡;以下是我cmd.exe
在 Windows 10 机器上得到的结果:
C:\tmp>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6
因此,我有网络接口卡 (NIC) 5 和 6。让我们查询 NIC 6 的 GUID,如下所示ServiceName
:
C:\tmp>reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\6
ServiceName REG_SZ {80CD6CC2-1673-4BBB-A561-C219841EE3A9}
Description REG_SZ Intel(R) Ethernet Connection (2) I219-V
好的,所以我的 NIC 6 的 GUID,即“Intel(R) Ethernet Connection (2) I219-V”,是{80CD6CC2-1673-4BBB-A561-C219841EE3A9}
。
然后,从https://www.autohotkey.com/docs/v1/misc/CLSID-List.htm我可以看到:
类标识符 | 地点 | 可用性 |
---|---|---|
::{7007ACC7-3202-11D1-AAD2-00805FC1270E} | 网络连接 | XP-11 |
...(控制面板)网络连接窗口的 CLSID 是::{7007ACC7-3202-11D1-AAD2-00805FC1270E}
。
最后,我可以将网络 NIC/适配器的 GUID 用反斜杠附加到网络连接窗口的 CLSID,然后运行它cmd.exe
:
start ::{7007ACC7-3202-11D1-AAD2-00805FC1270E}\{80CD6CC2-1673-4BBB-A561-C219841EE3A9}
...我得到了如下图左所示的以太网状态对话框:
在以太网状态对话窗口中,我仍然需要单击“属性”以授予管理员权限 - 然后我会看到以太网属性窗口。在以太网属性窗口中,我必须滚动并找到“Internet 协议版本 4 (TCP/IPv4)”条目,然后双击它 - 之后,我终于会看到“Internet 协议版本 4 (TCP/IPv4) 属性”对话窗口。
重申这一点,只是为了说清楚:我想要做的是在命令行上运行一个命令,然后进入此(以太网)连接的“Internet 协议版本 4(TCP/IPv4)属性”直接地(无需单击中间窗口)。
现在,我尝试在 Windows 注册表中查找“TCP/IPv4”字符串,并且有以下两个条目:
Computer\HKEY_USERS\.DEFAULT\Software\Classes\Local Settings\MuiCache\a39\52C64B7E
Computer\HKEY_USERS\S-1-5-18\Software\Classes\Local Settings\MuiCache\a39\52C64B7E
... 两者都具有:
- 钥匙:
@%SystemRoot%\system32\drivers\tcpip.sys,-10100
- 价值:
Internet Protocol Version 4 (TCP/IPv4)
据我所知,.sys
Windows 中的文件是驱动程序文件,它们有自己的限制(尽管我不知道这些限制的具体内容);tcpip.sys
TCP/IP Windows 驱动程序也必须如此。
然后,它似乎tcpip.sys
接受一个参数,在这种情况下-10100
,它似乎表示 TCP/IPv4——在注册表中可以注意到,例如该参数-10102
表示 TCP/IPv6。
因此,显然,“Internet 协议版本 4 (TCP/IPv4) 属性”以某种方式来自tcpip.sys
,使用参数 -10100 设置以目标 TCP/IPv4;但也以某种方式设置了{80CD6CC2-1673-4BBB-A561-C219841EE3A9}
我们想要查看其属性的目标网络连接 (此处) 的 GUID。
所以,我的问题是:有没有办法tcpip.sys
从命令行(cmd.exe
或 PowerShell)调出/打开 Windows 驱动程序文件的对话框窗口,同时指定参数(这里 TCP/IPv4 为 -10100,目标网络适配器/连接为 {80CD6CC2-1673-4BBB-A561-C219841EE3A9})?
如果不是直接从命令行执行,是否有任何 API 可以让我在 VBScript 或 Visual Studio 中的 C/C++ 中执行此操作,我可以查找/查阅?