is needed.
Code: Select all
Enumeration
#Window_0
#popup_disable
#popup_enable
#Combo_0
#Text_0
#Listview_0
#Button_scan
#Button_Close
#Button_disable
#Button_enable
#view_disable
EndEnumeration
Structure TCPV4_Setting
IPAddressV4.s [8] ;8 IP4 +8 IP6
SubNetV4.s[8]
Gateway.s[8]
DNS.s[8]
EndStructure
Structure TCPV6_Setting
IPAddressV6.s [8]
SubNetV6.s[8]
Gateway.s[8]
DNS.s[8]
EndStructure
#tcp_type_IP=0 ; IP
#tcp_type_SN=1 ;subnet
#tcp_type_GW=2 ;Gateway
#tcp_type_DNS=3 ; DNS
Structure Net_config_adapter
NetConnectID.s
Index.s
MACAddress.s
TCPV4.TCPV4_Setting;\IPAddressV4
TCPV6.TCPV6_Setting
Description.s
SettingID.s
AdapterType.s
Status.s
StatusInfo.w
AdapterTypeID.l
NetConnectionStatus.s
EndStructure
Global NewList ConfigNet.Net_config_adapter()
Global menuenable.l=0
;IncludePath "..\..\"
XIncludeFile "COMatePlus.pbi"
XIncludeFile "VariantHelper_Include.pb"
Declare GetStringfromVariant(*tosearch.VARIANT,tcp_type.l)
Procedure StringToBStr(string$)
Protected Unicode$ = Space(StringByteLength(string$, #PB_Unicode) + 1)
Protected bstr_string.l
PokeS(@Unicode$, String$, -1, #PB_Unicode)
bstr_string = SysAllocString_(@Unicode$)
ProcedureReturn bstr_string
EndProcedure
Procedure Open_Win()
If OpenWindow(#Window_0, 500, 300, 640, 480, "Win32_NetworkAdapter", #PB_Window_SystemMenu |#PB_Window_ScreenCentered| #PB_Window_SizeGadget | #PB_Window_TitleBar )
ListIconGadget(#Listview_0, 20, 60, 600, 300,"Index",40)
AddGadgetColumn(#Listview_0, 1, "NetConnectID", 560/5)
AddGadgetColumn(#Listview_0, 3, "MACAddress", 560/5)
AddGadgetColumn(#Listview_0, 4, "IP Adress", 560/5)
AddGadgetColumn(#Listview_0, 2,"Description" , 560/5)
AddGadgetColumn(#Listview_0, 5, "Connect State", 560/5)
ButtonGadget(#Button_scan,20,400,50,20,"Scan")
ButtonGadget(#Button_Close,570,400,50,20,"Close")
CheckBoxGadget(#view_disable, 260,400,180, 20,"View disabled Network Adapter")
EndIf
EndProcedure
Procedure Disable_Adapter(NetLuidIndex.l)
Define.COMateObject objWMIService, Adapter
colAdapters.COMateEnumObject
strComputer.s = "."
Net_Luid_Index$ = Str(NetLuidIndex)
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
colAdapters = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_NetworkAdapter Where Index= $0027" + Net_Luid_Index$ +"$0027')")
If colAdapters
Adapter= colAdapters\GetNextObject()
While Adapter
result.l = Adapter\Invoke("Disable()")
Adapter\Release()
Adapter = colAdapters\GetNextObject()
Wend
colAdapters\Release()
EndIf
objWMIService\Release()
EndIf
ProcedureReturn result ; if completed OK result returns 0
EndProcedure
Procedure Enable_Adapter(NetLuidIndex.l)
Define.COMateObject objWMIService, Adapter
colAdapters.COMateEnumObject
strComputer.s = "."
Net_Luid_Index$ = Str(NetLuidIndex)
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
colAdapters = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_NetworkAdapter Where Index= $0027" + Net_Luid_Index$ +"$0027')")
If colAdapters
Adapter= colAdapters\GetNextObject()
While Adapter
result.l = Adapter\Invoke("Enable()")
Adapter\Release()
Adapter = colAdapters\GetNextObject()
Wend
colAdapters\Release()
EndIf
objWMIService\Release()
EndIf
ProcedureReturn result ; if completed OK result returns 0
EndProcedure
Procedure.s Net_Connection_Status(NetConnectionStatus.l)
Select NetConnectionStatus
Case 0 ;0x0
ProcedureReturn "Disconnected"
Case 1 ;0x1
ProcedureReturn "Connecting"
Case 2 ;0x2
ProcedureReturn "Connected"
Case 3 ;0x3
ProcedureReturn "Disconnecting"
Case 4 ;0x4
ProcedureReturn "Hardware Not present"
Case 5 ;0x5
ProcedureReturn "Hardware disabled"
Case 6 ;0x6
ProcedureReturn "Hardware malfunction"
Case 7 ;0x7
ProcedureReturn "Media disconnected"
Case 8 ;0x8
ProcedureReturn "Authenticating"
Case 9 ;0x9
ProcedureReturn "Authentication succeeded"
Case 10 ;0xA
ProcedureReturn "Authentication failed"
Case 11 ;0x0B
ProcedureReturn "Invalid address"
Case 12 ;0xC
ProcedureReturn "Credentials required"
EndSelect
EndProcedure
Procedure GetStringfromVariant(*tosearch.VARIANT,tcp_type.l)
*sa.SafeArray
*varIP.VARIANT
If *tosearch\vt <> #VT_NULL
*sa = *tosearch\parray
IPv4.l=0
IPv6.l=0
For i = saLBound(*sa) To saUBound(*sa)
*varIP = SA_VARIANT(*sa, i)
If *varIP\vt <> #VT_BSTR
VariantChangeType_(*varIP, *varIP, 0, #VT_BSTR)
EndIf
Debug PeekS(*varIP\bstrVal, -1, #PB_Unicode)
tmpstring.s=PeekS(*varIP\bstrVal, -1, #PB_Unicode)
Select tcp_type
Case #tcp_type_IP
If tmpstring <>"" ;And tcp_type=0
If FindString(tmpstring,".",1)
ConfigNet()\TCPV4.TCPV4_Setting\IPAddressV4[IPv4]=tmpstring
IPv4=IPv4+1
Else
ConfigNet()\TCPV6.TCPV6_Setting\IPAddressV6[IPv6]=tmpstring
IPv6=IPv6+1
EndIf
EndIf
Case #tcp_type_SN
If tmpstring <>"" ;And tcp_type=0
If FindString(tmpstring,".",1)
ConfigNet()\TCPV4.TCPV4_Setting\SubNetV4[IPv4]=tmpstring
IPv4=IPv4+1
Else
ConfigNet()\TCPV6.TCPV6_Setting\SubNetV6[IPv6]=tmpstring
IPv6=IPv6+1
EndIf
EndIf
Case #tcp_type_GW
If tmpstring <>"" ;And tcp_type=0
If FindString(tmpstring,".",1)
ConfigNet()\TCPV4.TCPV4_Setting\Gateway[IPv4]=tmpstring
IPv4=IPv4+1
Else
ConfigNet()\TCPV6.TCPV6_Setting\Gateway[IPv6]=tmpstring
IPv6=IPv6+1
EndIf
EndIf
Case #tcp_type_DNS
If tmpstring <>"" ;And tcp_type=0
If FindString(tmpstring,".",1)
ConfigNet()\TCPV4.TCPV4_Setting\DNS[IPv4]=tmpstring
IPv4=IPv4+1
Else
ConfigNet()\TCPV6.TCPV6_Setting\DNS[IPv6]=tmpstring
IPv6=IPv6+1
EndIf
EndIf
EndSelect
VariantClear_(*varIP)
Next
saFreeSafeArray(*sa)
EndIf
VariantClear_(*tosearch) : FreeMemory(*tosearch)
EndProcedure
Procedure CIM_Net_Cfg()
Define.COMateObject objWMIService, NetCfg ,NetAdapter
colNetCfg.COMateEnumObject
Define colNetAdapter.COMateEnumObject
Define *IPAddress.VARIANT,*ConnectID.VARIANT
strComputer.s = "."
objWMIService = COMate_GetObject("winmgmts:\\" + strComputer + "\root\cimv2", "")
If objWMIService
colNetCfg = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_NetworkAdapter')")
If colNetCfg
NetCfg= colNetCfg\GetNextObject()
While NetCfg
*ConnectID= NetCfg\GetvariantProperty("NetConnectionID")
If PeekL(*ConnectID)=8 Or PeekL(*ConnectID)=1
AddElement(ConfigNet())
If PeekL(*ConnectID)=8
sConnectID.s= NetCfg\GetstringProperty("NetConnectionID")
ConfigNet()\NetConnectID=sConnectID
Else
ConfigNet()\NetConnectID="n/a"
EndIf
ConfigNet()\Index=Str(NetCfg\GetintegerProperty("Index"))
ConfigNet()\MACAddress=NetCfg\GetstringProperty("MACAddress")
ConfigNet()\AdapterType=NetCfg\GetstringProperty("AdapterType")
ConfigNet()\Status=NetCfg\GetstringProperty("Status")
ConfigNet()\StatusInfo=PeekW(NetCfg\GetvariantProperty("StatusInfo"))
ConfigNet()\AdapterTypeID=NetCfg\GetIntegerProperty("AdapterTypeID")
ConfigNet()\NetConnectionStatus=Net_Connection_Status(NetCfg\GetIntegerProperty("NetConnectionStatus"))
EndIf
NetCfg\Release()
NetCfg = colNetCfg\GetNextObject()
Wend
colNetCfg\Release()
EndIf
ResetList(ConfigNet())
colNetAdapter = objWMIService\CreateEnumeration("ExecQuery('Select * from Win32_NetworkAdapterConfiguration')")
If colNetAdapter
NetAdapter= colNetAdapter\GetNextObject()
While NetAdapter
NextElement(ConfigNet())
*IPAddress= NetAdapter\GetvariantProperty("IPAddress")
*IPSubnet=NetAdapter\GetvariantProperty("IPSubnet")
*DefaultIPGateway=NetAdapter\GetvariantProperty("DefaultIPGateway")
*DNSServerSearchOrder=NetAdapter\GetvariantProperty("DNSServerSearchOrder")
GetStringfromVariant(*IPAddress,#tcp_type_IP)
GetStringfromVariant(*IPSubnet,#tcp_type_SN)
GetStringfromVariant(*DefaultIPGateway,#tcp_type_GW)
GetStringfromVariant(*DNSServerSearchOrder,#tcp_type_DNS)
Description.s= NetAdapter\GetstringProperty("Description")
ConfigNet()\Description=Description
SettingID.s=NetAdapter\GetstringProperty("SettingID")
ConfigNet()\SettingID=SettingID
NetAdapter\Release()
NetAdapter = colNetAdapter\GetNextObject()
Wend
colNetAdapter\Release()
EndIf
objWMIService\Release()
EndIf
EndProcedure
;-start
Open_Win()
If CreatePopupMenu(#popup_enable)
MenuItem(1,"enable")
EndIf
If CreatePopupMenu(#popup_disable)
MenuItem(1,"disable")
EndIf
Repeat
event=WaitWindowEvent()
Select Event
Case #PB_Event_Menu
MenuID = EventMenu()
Debug "Menuid: "+Str(Menuid)
Select MenuID
Case 1
If menuenable=1
Debug "menu enable"
Enable_Adapter(Net_Luid_Index)
Else
Debug "menu disable"
Disable_Adapter(Net_Luid_Index)
EndIf
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Listview_0
gad.s=GetGadgetItemText(#Listview_0 ,GetGadgetState(#Listview_0 ),0)
GadgetToolTip(#Listview_0 , gad)
MB.l=EventType() ;<--- for checking if was pushed RMB or LMB, ...
GetCursorPos_(@var.TV_HITTESTINFO\pt) ;get mousepointer position screen coordenates
ScreenToClient_(GadgetID(#Listview_0 ),@var.TV_HITTESTINFO\pt) ;convert that coordenates to the Gadget 1 (TreeView Gadget) referenced by
SendMessage_(GadgetID(#Listview_0 ),#TVM_HITTEST,0,var) ;this is to know what is the item i am pointing.
SendMessage_(GadgetID(#Listview_0 ),#TVM_SELECTITEM,#TVGN_CARET,var\hItem);<-- and this selects the pointed item
itemsel=GetGadgetState(#Listview_0 ) ;save selected item
Select MB
Case #PB_EventType_RightClick
If GetGadgetState(#Listview_0 ) =>0
mac.s=GetGadgetItemText(#Listview_0 ,GetGadgetState(#Listview_0 ),3)
sNetConnectID.s=GetGadgetItemText(#Listview_0 ,GetGadgetState(#Listview_0 ),1)
Net_Luid_Index=Val(GetGadgetItemText(#Listview_0 ,GetGadgetState(#Listview_0 ),0))
If mac <> "" And sNetConnectID <> "n/a"
Debug "gad: "+gad
Debug Net_Luid_Index
Debug snetConnectID
DisplayPopupMenu(#popup_disable,WindowID(#Window_0))
menuenable=0
ElseIf mac = "" And sNetConnectID <> "n/a"
DisplayPopupMenu(#popup_enable,WindowID(#Window_0))
menuenable=1
EndIf
EndIf
EndSelect
Case #Button_scan
ClearGadgetItems(#Listview_0)
ClearList(ConfigNet())
CIM_Net_Cfg()
ResetList(ConfigNet())
x2=0
While NextElement(ConfigNet())
If Not ConfigNet()\NetConnectionStatus = "Disconnected" ;And GetGadgetState(#view_disable)=1
AddGadgetItem(#Listview_0,-1,ConfigNet()\Index)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectID,1)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\Description,2)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\MACAddress,3)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\TCPV4.TCPV4_Setting\IPAddressV4,4)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectionStatus,5)
x2=x2+1
ElseIf GetGadgetState(#view_disable)=1
AddGadgetItem(#Listview_0,-1,ConfigNet()\Index)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectID,1)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\Description,2)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\MACAddress,3)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\TCPV4.TCPV4_Setting\IPAddressV4,4)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectionStatus,5)
x2=x2+1
EndIf
Wend
Case #Button_disable
Disable_Adapter(17)
Case #Button_enable
Enable_Adapter(17)
Case #view_disable
If GetGadgetState(#view_disable) And ListSize(ConfigNet())
ClearGadgetItems(#Listview_0)
ResetList(ConfigNet())
x2=0
While NextElement(ConfigNet())
AddGadgetItem(#Listview_0,-1,ConfigNet()\Index)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectID,1)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\Description,2)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\MACAddress,3)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\TCPV4.TCPV4_Setting\IPAddressV4,4)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectionStatus,5)
x2=x2+1
Wend
EndIf
If Not GetGadgetState(#view_disable) And ListSize(ConfigNet())
ClearGadgetItems(#Listview_0)
ResetList(ConfigNet())
x2=0
While NextElement(ConfigNet())
If Not ConfigNet()\NetConnectionStatus = "Disconnected"
AddGadgetItem(#Listview_0,-1,ConfigNet()\Index)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectID,1)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\Description,2)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\MACAddress,3)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\TCPV4.TCPV4_Setting\IPAddressV4,4)
SetGadgetItemText(#Listview_0,x2,ConfigNet()\NetConnectionStatus,5)
x2=x2+1
EndIf
Wend
EndIf
Case #PB_Event_Menu
Case #Button_Close
End
Select EventMenu()
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End