Hallo,
ich stehe auf dem Schlauch. Ich würde gerne von Autoit auslesen lassen, ob das Netzwerkkabel von der Netzwerkkarte abgezogen worden ist. Im Systray wird das ja sofort angezeigt, aber wie komme ich mit einem Script an diese Information?
Bin für jede Anregung dankbar!
Netzwerkadapter auslesen
-
mattbecher -
12. September 2016 um 18:16 -
Erledigt
-
-
Systray auslesen sollte schon öfters vorhanden sein. Hier ein kleines Skript als Grundlage:
AutoIt
Alles anzeigen#include <Array.au3> #include <GuiToolBar.au3> Get_SysTray_IconText() Func Get_SysTray_IconText() Local $hSysTray_Handle For $i = 1 To 99 ; Find systray handles $hSysTray_Handle = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:' & $i & ']') If @error Then ;MsgBox(16, "Error", "System tray not found") ExitLoop EndIf ; Get systray item count Local $iSysTray_ButCount = _GUICtrlToolbar_ButtonCount($hSysTray_Handle) If $iSysTray_ButCount = 0 Then ;MsgBox(16, "Error", "No items found in system tray") ContinueLoop EndIf Local $aSysTray_ButtonText[$iSysTray_ButCount] ; Look for wanted tooltip For $iSysTray_ButtonNumber = 0 To $iSysTray_ButCount - 1 $aSysTray_ButtonText[$iSysTray_ButtonNumber] = _GUICtrlToolbar_GetButtonText($hSysTray_Handle, $iSysTray_ButtonNumber) Next _ArrayDisplay($aSysTray_ButtonText, "SysTray Icon Text", Default, 8) Next EndFunc ;==>Get_SysTray_IconText Exit
kannst du aber auf das nötigste eindampfen.
-
Oder du machst das mit Hilfe der WMI.
Hier mal ein kleines Beispiel:Spoiler anzeigen
AutoIt
Alles anzeigenMsgBox(64, "_CheckNetConnection()", _CheckNetConnection()) Func _CheckNetConnection() ; source: https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter Where Name = 'Killer e2200 Gigabit Ethernet Controller'", "WQL", 0x10 + 0x20) If IsObj($colItems) Then For $objItem In $colItems Select Case $objItem.NetConnectionStatus = 0 Return "Disconnected" Case $objItem.NetConnectionStatus = 1 Return "Connecting" Case $objItem.NetConnectionStatus = 2 Return "Connected" Case $objItem.NetConnectionStatus = 3 Return "Disconneting" Case $objItem.NetConnectionStatus = 4 Return "Hardware not present" Case $objItem.NetConnectionStatus = 5 Return "Hardware disabled" Case $objItem.NetConnectionStatus = 6 Return "Hardware malfunction" Case $objItem.NetConnectionStatus = 7 Return "Media disconnected" Case $objItem.NetConnectionStatus = 8 Return "Authenticating" Case $objItem.NetConnectionStatus = 9 Return "Authentication succeeded" Case $objItem.NetConnectionStatus = 10 Return "Authentication failed" Case $objItem.NetConnectionStatus = 11 Return "Invalid address" Case $objItem.NetConnectionStatus = 12 Return "Credentials required" EndSelect Next EndIf EndFunc
Es muss nur der Name der Netzwerkkarte angepasst werden
-
Oder mit der WinAPI InternetGetConnectedState
-
Oder Du pingst etwas an, was wirklich immer erreichbar ist. Keine Ping Antwort - kein Kabel.....
MFG
Peter
-
Vielen Dank, klasse, funktioniert alles, ich werde die Lösung mit Hilfe der WMI weiter verfolgen.
Auf diese Ansätze mit der objektorientierten Programmierung wäre ich selbst nicht gekommen,
nochmals Danke. -
So geht es auch... hier muss ebenfalls nur der Name der Netzwerkkarte angepasst werden.
WMICGetNetConnectionStatus()
AutoIt
Alles anzeigen#Region ;************ Includes ************ ;#include <Array.au3> #Include <AutoItConstants.au3> #Include <StringConstants.au3> #EndRegion ;************ Includes ************ ;-- TIME_STAMP 2016-09-14 18:23:46 Global $g_sName = 'Realtek PCIe GBE Family Controller' MsgBox(262144, 'WMICGetNetConnectionStatus()', _ StringFormat('\t\t"%s"\t\t\r\r\r%s\r\r%s\r\r%s', $g_sName, 'NetConnectionStatus: ' & WMICGetNetConnectionStatus(), _ '#Error: ' & @error, '#Extended: ' & @extended)) Func WMICGetNetConnectionStatus() ; Local $iPID = Run('WMIC NIC Where NetConnectionID!=NULL GET * /VALUE', '', @SW_HIDE, $STDOUT_CHILD) ; ProcessWaitClose($iPID) ; Exit _ArrayDisplay(StringSplit(StdoutRead($iPID), @CRLF, $STR_ENTIRESPLIT), 'WMIGetNetConnectionStatus()') ; Local $iPID = Run('WMIC NIC Where Name="' & $g_sName & '" GET NetConnectionStatus', '', @SW_HIDE, $STDOUT_CHILD) If @error Then Return SetError(1) ProcessWaitClose($iPID) Local $aArray = StringSplit(StringStripWS(StdoutRead($iPID), $STR_STRIPTRAILING), @CRLF, $STR_ENTIRESPLIT) If @error Then Return SetError(MsgBox(262144, "WMICGetNetConnectionStatus()", "Bei StringSplit() ist ein Fehler aufgetreten!") + 2) Switch $aArray[2] Case 0 Return SetError(0, 0, "Disconnected") Case 1 Return SetError(0, 1, "Connecting") Case 2 Return SetError(0, 2, "Connected") Case 3 Return SetError(0, 3, "Disconneting") Case 4 Return SetError(0, 4, "Hardware not present") Case 5 Return SetError(0, 5, "Hardware disabled") Case 6 Return SetError(0, 6, "Hardware malfunction") Case 7 Return SetError(0, 7, "Media disconnected") Case 8 Return SetError(0, 8, "Authenticating") Case 9 Return SetError(0, 9, "Authentication succeeded") Case 10 Return SetError(0, 10, "Authentication failed") Case 11 Return SetError(0, 11, "Invalid address") Case 12 Return SetError(0, 12, "Credentials required") EndSwitch Return SetError(69) ;-) EndFunc ;==>WMICGetNetConnectionStatus