; 快捷弹出网络连接:Run ncpa.cpl
Name := NetConnectionName()
; 将ipv4设为自动获取
RunWait %ComSpec% /c netsh interface ip set address name="%Name%" source=dhcp, , Hide
RunWait %ComSpec% /c netsh interface ip set dns name="%Name%" source=dhcp, ,Hide
; 将ipv4设为指定值【IP地址、子网掩码、默认网关,第二个RunWait为:DNS】
; Runwait %ComSpec% /c netsh interface ip set address name=`"%name%`" source=static addr=10.1.23.77 mask=255.255.255.0 gateway=10.1.23.1 gwmetric=1, , Hide
; RunWait %ComSpec% /c netsh interface ip set dns name=`"%name%`" source=static addr=10.1.23.1, ,Hide
Return
NetConnectionName() {
wmiService := ComObjGet("winmgmts:\\.\root\CIMV2")
; 执行WQL查询获取所有网络适配器配置,寻找启用的且非虚拟的且已连接的
adaptersConfig := wmiService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = true")
; 通过网络适配器配置找到活动的网络适配器
For adapterConfig in adaptersConfig {
; 使用该Index查询Win32_NetworkAdapter以获取更多信息(如MAC地址)
adapter := wmiService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE Index = " adapterConfig.Index).ItemIndex(0)
; 检查这个适配器是否是当前活动的
If (adapter.NetConnectionStatus = 2) ; 2 表示已连接状态
break ; 假设只有一个活动的网络连接,找到后即退出循环
}
; MsgBox % "活动网络适配器:" adapter.Name "`nMAC地址:" adapter.MACAddress "`n网络连接名称:" . adapter.NetConnectionID
Return adapter.NetConnectionID
}
/* ; 老版本用CMD获取备份
mac := StrReplace(GetMacAddress(),"-",":")
adaptors := GetAdaptors() ;获取网卡列表
For _, adaptor in adaptors {
if (adaptor.mac = mac) {
name := adaptor.name
; 将ipv4设为自动获取
RunWait, %ComSpec% /c netsh interface ip set address name="%name%" source=dhcp, , Hide
RunWait, %ComSpec% /c netsh interface ip set dns name="%name%" source=dhcp, ,Hide
; 将ipv4设为指定值
; Runwait, %ComSpec% /c netsh interface ip set address name=`"%name%`" source=static addr=10.1.23.77 mask=255.255.255.0 gateway=10.1.23.1 gwmetric=1, , Hide
; RunWait, %ComSpec% /c netsh interface ip set dns name=`"%name%`" source=static addr=10.1.23.1, ,Hide
}
}
GetAdaptors(){
adaptors := {}
ipconfig := cmd("ipconfig /all") ;cmd方式兼容XP
lines := StrSplit(ipconfig,"`n","`r")
aid = 0
for id,line in Lines
{
if (!RegExMatch(line,"^\s*$"))
{
if RegExMatch(line, "^.*(适配器|adapter)\s([^\s].*):$", mn)
{
aid++
adaptors[aid] := {}
adaptors[aid].name := mn2
}
Else
{
if RegExMatch(line, "^.*(物理地址|Physical Address).*:\s(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})-(\w{2})$", mm)
adaptors[aid].mac := mm2 ":" mm3 ":" mm4 ":" mm5 ":" mm6 ":" mm7
}
}
}
return adaptors
}
GetMacAddress(){ ;获取当前活动网卡MAC
res := cmd("getmac /NH")
RegExMatch(res, ".*?([0-9A-Z].{16})(?!\w\\Device)", mac)
return %mac1%
}
cmd(sCmd, sEncoding:="CP0", sDir:="", ByRef nExitCode:=0) {
DllCall( "CreatePipe", PtrP,hStdOutRd, PtrP,hStdOutWr, Ptr,0, UInt,0 )
DllCall( "SetHandleInformation", Ptr,hStdOutWr, UInt,1, UInt,1 )
VarSetCapacity( pi, (A_PtrSize == 4) ? 16 : 24, 0 )
siSz := VarSetCapacity( si, (A_PtrSize == 4) ? 68 : 104, 0 )
NumPut( siSz, si, 0, "UInt" )
NumPut( 0x100, si, (A_PtrSize == 4) ? 44 : 60, "UInt" )
NumPut( hStdOutWr, si, (A_PtrSize == 4) ? 60 : 88, "Ptr" )
NumPut( hStdOutWr, si, (A_PtrSize == 4) ? 64 : 96, "Ptr" )
If ( !DllCall( "CreateProcess", Ptr,0, Ptr,&sCmd, Ptr,0, Ptr,0, Int,True, UInt,0x08000000
, Ptr,0, Ptr,sDir?&sDir:0, Ptr,&si, Ptr,&pi ) )
Return ""
, DllCall( "CloseHandle", Ptr,hStdOutWr )
, DllCall( "CloseHandle", Ptr,hStdOutRd )
DllCall( "CloseHandle", Ptr,hStdOutWr ) ; The write pipe must be closed before reading the stdout.
While ( 1 )
{ ; Before reading, we check if the pipe has been written to, so we avoid freezings.
If ( !DllCall( "PeekNamedPipe", Ptr,hStdOutRd, Ptr,0, UInt,0, Ptr,0, UIntP,nTot, Ptr,0 ) )
Break
If ( !nTot )
{ ; If the pipe buffer is empty, sleep and continue checking.
Sleep, 100
Continue
} ; Pipe buffer is not empty, so we can read it.
VarSetCapacity(sTemp, nTot+1)
DllCall( "ReadFile", Ptr,hStdOutRd, Ptr,&sTemp, UInt,nTot, PtrP,nSize, Ptr,0 )
sOutput .= StrGet(&sTemp, nSize, sEncoding)
}
; * SKAN has managed the exit code through SetLastError.
DllCall( "GetExitCodeProcess", Ptr,NumGet(pi,0), UIntP,nExitCode )
DllCall( "CloseHandle", Ptr,NumGet(pi,0) )
DllCall( "CloseHandle", Ptr,NumGet(pi,A_PtrSize) )
DllCall( "CloseHandle", Ptr,hStdOutRd )
Return sOutput
}
*/
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)