ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 430|回复: 1

[求助] 如何用VBA获取ncpa.cpl窗口中的全部列表信息?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-7 13:19 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
在PowerShell 下用 Get-NetAdapter 命令
和在cmd 下用 netsh interface show interface 命令
都无法显示 在断开连接情况下的 Miniport  (PPTP)对应的 连接名称
只能在ncpa.cpl窗口查看
请问如何用VBA获取ncpa.cpl窗口中的全部列表信息?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-7 13:36 | 显示全部楼层
ChatGPT给的代码,无法运行:
  1. Option Explicit
  2. '要使用VBA获取ncpa.cpl窗口中的全部列表信息,需要使用Windows API函数和VBA代码来模拟用户操作。

  3. '以下是一个示例VBA代码,它可以打开ncpa.cpl窗口,并获取其中所列出的网络适配器列表。请注意,该代码可能需要进行一些修改才能适应您的系统设置和网络配置。

  4. Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  5. Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  6. Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

  7. Private Const WM_COMMAND As Long = &H111
  8. Private Const BN_CLICKED As Long = 0&

  9. Sub GetNetworkAdapters()
  10.     Dim hWndNCPA As Long
  11.     Dim hWndLstAdapters As Long
  12.     Dim i As Integer
  13.     Dim sText As String
  14.    
  15.     ' Find the main window of ncpa.cpl
  16.     hWndNCPA = FindWindow("Shell_TrayWnd", vbNullString)
  17.     hWndNCPA = FindWindowEx(hWndNCPA, 0&, "TrayNotifyWnd", vbNullString)
  18.     hWndNCPA = FindWindowEx(hWndNCPA, 0&, "SysPager", vbNullString)
  19.     hWndNCPA = FindWindowEx(hWndNCPA, 0&, "SysTabControl32", vbNullString)
  20.     hWndNCPA = FindWindowEx(hWndNCPA, 0&, "SysListView32", "FolderView")
  21.    
  22.     ' Find the list of network adapters
  23.     hWndLstAdapters = FindWindowEx(hWndNCPA, 0&, "SysListView32", vbNullString)
  24.    
  25.     ' Click on the first adapter to select it
  26.     SendMessage hWndLstAdapters, WM_COMMAND, BN_CLICKED, 0&
  27.    
  28.     ' Loop through all adapters and get their names
  29.     sText = ""
  30.     i = 0
  31.     Do While True
  32.         sText = ""
  33.         i = i + 1
  34.         hWndLstAdapters = FindWindowEx(hWndNCPA, hWndLstAdapters, "SysListView32", vbNullString)
  35.         If hWndLstAdapters = 0 Then Exit Do
  36.         SendMessage hWndLstAdapters, WM_COMMAND, BN_CLICKED, i - 1
  37.         GetTextFromControl hWndLstAdapters, sText
  38.         Debug.Print sText
  39.     Loop
  40.    
  41. End Sub

  42. Private Sub GetTextFromControl(ByVal hWnd As Long, ByRef sText As String)
  43.     Dim buf As String
  44.     Dim ln As Long
  45.    
  46.     ln = SendMessage(hWnd, WM_GETTEXTLENGTH, 0&, ByVal 0&)
  47.     buf = String(ln + 1, Chr$(0))
  48.     SendMessage hWnd, WM_GETTEXT, ln + 1, ByVal buf
  49.     sText = Left(buf, ln)
  50.    
  51. End Sub

  52. '这段代码首先使用FindWindow函数来查找ncpa.cpl窗口的主窗口句柄,然后使用FindWindowEx函数来查找该窗口中的网络适配器列表。接下来,代码使用SendMessage函数模拟点击列表中的每个适配器,以获取列表中所有适配器的名称。此时,代码调用GetTextFromControl子程序来获取列表中选定适配器的名称。
  53. '请注意,这只是一个示例代码,只能模拟用户在ncpa.cpl窗口中进行的手动操作。实际上,如果您要获取网络适配器的详细信息,您可能需要使用其他Windows API函数和WMI类来获取更多信息。
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 17:43 , Processed in 0.025257 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表