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

Code: Select all

run, %ComSpec% /k ipconfig

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

run, %ComSpec% /k ipconfig

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
;==========================================