Page 1 of 1
LAN oder WLAN aktiv
Posted: 29 Jun 2020, 13:45
by PIcard_1983
Hallo,
ich habe mal eine Frage: Ich versuche irgendwie herauszufinden ob ich bei meine Ehternetverbindung das LAN Kabel angeschlossen habe oder nicht.
Also ob der Ethernetadapter aktiv ist oder nicht.
Das muss doch irgendwie gehen oder?
Ich habe schonmal im Forum herum gelesen und folgende Funktion gefunden:
Code: Select all
ConnectedToInternet(flag=0x40) {
Return DllCall("Wininet.dll\InternetGetConnectedState", "Str", flag,"Int",0)
}
Dort bekomme ich aber nur ob Internet ja oder nein. Das bringt mir nix. Ich suche eine Funktion, ob mein Laptop mit LAN oder WLAN verbunden ist.
Kann mir da jemand weiterhelfen?
Danke
Gruß
Picard
Re: LAN oder WLAN aktiv
Posted: 29 Jun 2020, 14:35
by KHA
Versuch mal damit.
Code: Select all
MsgBox, % RunWaitEin("netsh interface show interface")
RunWaitEin(Befehl) {
shell := ComObjCreate("WScript.Shell")
exec := shell.Exec(ComSpec " /C " Befehl)
For i, v in StrSplit(exec.StdOut.ReadAll, "`n", "`r")
{
if (v = "")
continue
if InStr(v, "Verbunden")
Verbunden = % v
}
return % Verbunden
}
Re: LAN oder WLAN aktiv
Posted: 29 Jun 2020, 14:42
by garry
@KHA , danke, hab noch dies gefunden
EDIT : modified ( tempfile fehlte )
https://www.autohotkey.com/boards/viewtopic.php?f=5&t=46333
Code: Select all
;-https://www.autohotkey.com/boards/viewtopic.php?f=5&t=46333 user gregster
;- https://www.autohotkey.com/boards/viewtopic.php?f=5&t=46333
msgbox % GetLanIP()
GetLanIP() ; Credit https://www.reddit.com/r/AutoHotkey/comments/6haneq/external_ip_address/
{
tempfile = %a_desktop%\ipinfo.txt ; adjust filepath
FileDelete, % tempfile
run, %ComSpec% /c ipconfig > %tempfile%, , Hide
While !FileExist(tempfile)
sleep, 100
FileRead lanInfo, % tempfile
loop, Parse, lanInfo, `n
{
if(InStr(A_LoopField, "IPv4"))
{
lanIp := Trim(SubStr(A_LoopField, InStr(A_LoopField, ":")+2), "`r`n")
FileDelete, % tempfile
Return lanIP
}
}
lanIP := "Check Network Connection"
Return lanIP
}
Re: LAN oder WLAN aktiv
Posted: 29 Jun 2020, 14:48
by gregster
garry, in deiner Codebox oben scheint was zu fehlen (und unterscheidet sich zum
Code im Topic), mindestens in der
run-Zeile (
run, %ComSpec% /k ipconfig, , ).
Diese Funktion beruht ja auf dem Umleiten des Ergebnisses in eine temporäre Datei, soweit ich das sehe:
run, %ComSpec% /c ipconfig > %tempfile%, , Hide
Re: LAN oder WLAN aktiv
Posted: 29 Jun 2020, 15:07
by garry
@gregster , sorry, danke , hatte was gebastelt ... habe script oben geändert
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 01:51
by PIcard_1983
Vielen Dank für die Hinweise. Ich denke, damit komme ich klar. DANKE!!!
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 02:14
by haichen
Der ursprüngliche Code ist vermutlich von jNizM und ich habe es durch ausprobieren nur wenig abgewandelt (so meine Erinnerung):
Code: Select all
MsgBox, % "GW " getGateway() "`nIP " getIP()
return
getGateway(){
objWMIService := ComObjGet("winmgmts:\\.\root\cimv2")
colItems := objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")._NewEnum
while colItems[objItem]
loop,4
if (objItem.IPAddress[0] == A_IPAddress%a_index%) and !(objItem.DefaultIPGateway[0] = 0)
return objItem.DefaultIPGateway[0]
return
}
getIP(){
objWMIService := ComObjGet("winmgmts:\\.\root\cimv2")
colItems := objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")._NewEnum
while colItems[objItem]
loop,4
if (objItem.IPAddress[0] == A_IPAddress%a_index%) and !(objItem.DefaultIPGateway[0] = 0)
return A_IPAddress%a_index%
return
}
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 02:46
by jNizM
Könnte gut möglich sein haichen ;D
Aber ich würde WinAPI der WMI-Abfrage beforzugen (
https://www.autohotkey.com/boards/viewtopic.php?f=6&t=71627)
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 03:14
by haichen
Kannst du mir erklären warum die WMI-Abfrage nicht so "schön" ist? Ist sie zu langsam?
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 03:19
by garry
danke für die scripts , sehr viel Informationen
hier nur kurze Uebersicht ob mit LAN oder WLAN verbunden ( z.B. bei meinem Computer Abfrage a_ipaddress1 ) :
Bemerkung : habe normal LAN , schalte WLAN ein sind kurzzeitig beide verbunden , danach Verbindung via WLAN
Code: Select all
;- run, %comspec% /k Netsh wlan show networks mode=bssid ;- zeigt alle WLAN's an
run, %ComSpec% /k ipconfig
msgbox,%a_ipaddress1% ;- << IPv4-Adresse
exitapp
;---------------------------------------------------------------------------
/*
Ethernet-Adapter Ethernet:
------------------------ wenn getrennt : -------------------------------
Medienstatus. . . . . . . . . . . : Medium getrennt
Verbindungsspezifisches DNS-Suffix: home
------------------------ nicht getrennt : -------------------------------
IPv4-Adresse . . . . . . . . . . : 192.168.1.113
=========================================================================
Drahtlos-LAN-Adapter WLAN:
------------------------ wenn getrennt : -------------------------------
Medienstatus. . . . . . . . . . . : Medium getrennt
Verbindungsspezifisches DNS-Suffix: home
------------------------ nicht getrennt : -------------------------------
IPv4-Adresse . . . . . . . . . . : 192.168.1.114
=========================================================================
*/
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 03:39
by jNizM
WMI-Vorteil: Beinhaltet von Hause aus schon viele Informationen, die leicht(er) zu bekommen sind, ohne unnötig viele WinAPI's direkt abzufragen oder sich überhaupt mit der API (DllCall's usw.) zu befassen.
WMI-Nachteil: Es ist im Vergleich zur direkten WinAPI-Abfrage sehr langsam und verbraucht mehr Ressourcen (CPU / RAM)
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 04:00
by haichen
Ah ja. Mit den WMI-Abfragen bekomme ich dank dem "WMI Code Creator" so etwa hin, was ich haben will. Die API-Abfragen verstehe ich leider noch nicht so gut.
Viele Dank für deine Antwort.
Re: LAN oder WLAN aktiv
Posted: 30 Jun 2020, 14:19
by garry
LAN oder WLAN , ein einfaches GUI , fragt nur nach a_ipaddress1 , evtl gilt nur für mein PC
wenn nichts angezeigt wird > kein Internet
Wäre dieses Beispiel ok ?
siehe :
Code: Select all
;- WLAN or LAN
;- run, %comspec% /k Netsh wlan show networks mode=bssid ;- zeigt alle WLAN's an
;run, %ComSpec% /k ipconfig
;msgbox,%a_ipaddress1% ;- << IPv4-Adresse
#warn
#NoEnv
SetWorkingDir, %A_ScriptDir%
wa:=A_screenwidth,ha:=A_screenHeight,xx:=100
Gui,2: -DPIScale
c1=D4D0C8 ;- gray normal msgbox
Gui,2: Color, Black,%c1% ;- Gui color / background from Edit
Gui,2: Font,cYellow s14 ,Lucida Console ;- font , font-size and color
;----------------
x:=(wa*1)/xx,y1:=(ha*2)/xx,y2:=(ha*5)/xx
gui,2: add, text, x%x% y%y1% , LAN =
gui,2: add, text, x%x% y%y2% , WLAN =
;----------------
x:=(wa*6)/xx,w:=(wa*8)/xx,h:=(ha*2.6)/xx
gui,2: add, edit, x%x% y%y1% h%h% w%w% vLAN readonly right ,
gui,2: add, edit, x%x% y%y2% h%h% w%w% vWLAN readonly right ,
;----------------
x:=(wa*7)/xx,y:=(ha*1)/xx,w:=(wa*17)/xx,h:=(ha*17)/xx
gui,2: show ,x%x% y%y% w%w% h%h%,LAN or WLAN IPv4-Address
;----------------
Gui,2: add,text,x0 y0 h0 w0 vT1
GuiControl,2:Focus,T1
settimer,aas,1000
return
;------------------------
2Guiclose:
exitapp
;------------------------
Aas:
acx:=a_ipaddress1
GuiControl,2:,LAN
GuiControl,2:,WLAN
if (acx="192.168.1.113")
GuiControl,2:,LAN,%acx%
if (acx="192.168.1.114")
GuiControl,2:,WLAN,%acx%
return
;==========================================