Hallo blubbstar!
Ich wünsche dir alles Gute zu deinem 22. Geburtstag! Bleib Gesund und feier schön! Samstag ist dafür ideal
Beiträge von funkey
-
-
Hallo, da ich die Funktion GetIpAddrTable brauchte, und im englischen Forum nur ein nicht mehr funktionierendes Beispiel aus dem Jahre 2006 zu finden war (hier), habe ich nun die Funktion neu geschrieben. Ich hoffe, das es jemand brauchen kann.
Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]Global $aIpTable = _GetIpAddrTable()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($aIpTable)Func _GetIpAddrTable($bOrder = 0)
[/autoit] [autoit][/autoit] [autoit]
;funkey 2013, Aug 17th
Local Const $tagMIB_IPADDRROW = "STRUCT;DWORD dwAddr;DWORD dwIndex;DWORD dwMask;DWORD dwBCastAddr;DWORD dwReasmSize;USHORT unused1;USHORT wType;ENDSTRUCT;"
Local Const $tagMIB_IPADDRTABLE = "DWORD dwNumEntries;" & $tagMIB_IPADDRROWLocal Const $MIB_IPADDR_PRIMARY = 0x0001
[/autoit] [autoit][/autoit] [autoit]
Local Const $MIB_IPADDR_DYNAMIC = 0x0004
Local Const $MIB_IPADDR_DISCONNECTED = 0x0008
Local Const $MIB_IPADDR_DELETED = 0x0040
Local Const $MIB_IPADDR_TRANSIENT = 0x0080Local $aRet, $dwSize, $dwNumEntries, $tMIB_IPADDRTABLE, $tagTemp = $tagMIB_IPADDRTABLE
[/autoit] [autoit][/autoit] [autoit]
Local $iIpAddrRowSize = 24, $iSize = 28, $aTemp, $iTemp$aRet = DllCall("iphlpapi.dll", "int", "GetIpAddrTable", "ptr", 0, "DWORD*", 0, "BOOL", $bOrder)
[/autoit] [autoit][/autoit] [autoit]
$dwSize = $aRet[2]
While $iSize < $dwSize
$tagTemp &= $tagMIB_IPADDRROW
$iSize += $iIpAddrRowSize
WEnd$tMIB_IPADDRTABLE = DllStructCreate($tagTemp)
[/autoit] [autoit][/autoit] [autoit]$aRet = DllCall("iphlpapi.dll", "int", "GetIpAddrTable", "struct*", $tMIB_IPADDRTABLE, "DWORD*", $dwSize, "BOOL", $bOrder)
[/autoit] [autoit][/autoit] [autoit]
If $aRet[0] <> 0 Then Return SetError(1, 0, 0)$dwNumEntries = DllStructGetData($tMIB_IPADDRTABLE, "dwNumEntries")
[/autoit] [autoit][/autoit] [autoit]Local $aData[$dwNumEntries + 1][6] = [["Interface Index", "IP Address", "Subnet Mask", "Broadcast", "Reassembly size", "Type and State"]]
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To $dwNumEntries
$aData[$i][0] = DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 + 3)
$aTemp = DllCall("ws2_32.dll", "str", "inet_ntoa", "ptr", DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 + 2))
$aData[$i][1] = $aTemp[0]
$aTemp = DllCall("ws2_32.dll", "str", "inet_ntoa", "ptr", DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 + 4))
$aData[$i][2] = $aTemp[0]
$aTemp = DllCall("ws2_32.dll", "str", "inet_ntoa", "ptr", DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 + 5))
$aData[$i][3] = $aTemp[0]
$aData[$i][4] = DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 + 6)
$iTemp = DllStructGetData($tMIB_IPADDRTABLE, ($i - 1) * 7 +
If BitAND($iTemp, $MIB_IPADDR_PRIMARY) Then $aData[$i][5] &= "Primary IP Address;"
If BitAND($iTemp, $MIB_IPADDR_DYNAMIC) Then $aData[$i][5] &= "Dynamic IP Address;"
If BitAND($iTemp, $MIB_IPADDR_DISCONNECTED) Then $aData[$i][5] &= "Address is on disconnected interface;"
If BitAND($iTemp, $MIB_IPADDR_DELETED) Then $aData[$i][5] &= "Address is being deleted;"
If BitAND($iTemp, $MIB_IPADDR_TRANSIENT) Then $aData[$i][5] &= "Transient address;"
$aData[$i][5] = StringTrimRight($aData[$i][5], 1)
NextReturn $aData
[/autoit]
EndFunc ;==>_GetIpAddrTable
Schöne Grüße
funkey -
Liegt die DLL auch im Skriptverzeichnis?
Und hier ist der Original-Thread, wo man auch fragen stellen kann, wenn man Probleme hat: http://www.autoitscript.com/forum/topic/12…df/#entry341916
Ich habe diese UDF auch mal benutzt, ging einwandfrei. -
-
Wird die Funktion auch genau mit dem Namen 'add' exportiert? Schau mal mit dem DLLExplorer oder Dependency-Walker nach. Ansonsten sollte es wohl passen. Hab jetzt allerdings nichts downgeloaded. 1,29MB für eine DLL die nur eine add-Funktion und eine AutoIt-Skript enthält ist recht groß
-
Man kann ja auch nicht ohne Fehler 'echo 123|456' in die Console eingeben! Das |-Zeichen dient als Pipe und es wird versucht das Programm 456 auszuführen.
Aber 'echo "123|456"' funktioniert in der Konsole. -
_WinAPI_DefineDosDevice() aus der WinAPIEx-UDF sollte auch funktionieren. Getestet habe ich das aber noch nicht.
-
[autoit]
$oExcel.ActiveSheet.Columns("A:E").AutoFit
[/autoit] -
Hallo,
nett gemacht. Ich hätte das aber auf diese Art gemacht:Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
[/autoit] [autoit][/autoit] [autoit]
GUICreate("My GUI group") ; will create a dialog box that when displayed is centeredGUICtrlCreateGroup("Group 1", 10, 60, 90, 140)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateRadio("Radio 1", 30, 90, 50, 20)
GUICtrlCreateRadio("Radio 2", 30, 110, 60, 50)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group_GUICtrlCreateGroup("Group 1", 140, 60, 90, 140, 0xFF0000, 0xCC5500)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateRadio("Radio 1", 160, 90, 50, 20)
GUICtrlCreateRadio("Radio 2", 160, 110, 60, 50)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group_GUICtrlCreateGroup("Group 1", 270, 60, 90, 140, 0x0000FF, 0x0F0FF0, 2)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateRadio("Radio 1", 290, 90, 50, 20)
GUICtrlCreateRadio("Radio 2", 290, 110, 60, 50)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close groupGUISetState() ; will display an empty dialog box
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
[/autoit] [autoit][/autoit] [autoit]
While 1
Local $msg = GUIGetMsg()If $msg = $GUI_EVENT_CLOSE Then ExitLoop
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEnd
EndFunc ;==>ExampleFunc _GuiCtrlCreateGroup($sText, $iX, $iY, $iW, $iH, $iRectCol = -1, $iFontCol = -1, $iFontAttribute = -1)
[/autoit]
GUIStartGroup()
Local $nGraph = GUICtrlCreateGraphic($iX, $iY, $iW, $iH, 0)
If $iRectCol <> -1 Then GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $iRectCol)
GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, $iW, $iH)
GUICtrlCreateLabel($sText, $iX + 5, $iY - 5, Default, Default, 0x1) ; $SS_CENTER
If $iFontCol <> -1 Then GUICtrlSetColor(-1, $iFontCol)
If $iFontAttribute <> -1 Then GUICtrlSetFont(-1, Default, Default, $iFontAttribute)
EndFunc ;==>_GuiCtrlCreateGroup -
Ich hatte auch mal ein Problem mit dem Löschen von temporären Dateien. Das hat gedauert bis ich dahintergekommen bin, dass ich einen Fehler im Dateinamen hatte. Vielleicht ist es bei dir auch so, gib dir mal den gesamten Pfad in die Console aus.
-
Ach von DHCP wird hier geredet. Die Ports stehen ja auch auf der o.a. Liste. Danke für das nützliche Skript!
Edit: Ein nützlicher Link zu DHCP: http://knowurtech.netfirms.com/networking/how_dhcp_works.html
-
Hab jetzt den Quellcode nicht mehr bei mir. Bist du sicher, dass in Dateien geschrieben werden soll?
Es könnte auch der Code in die Variablen $aCall[1] und $aCall[2] zurückgegeben werden. Dann würde ich aber beides mal 'str*' und einen Leerstring übergeben. -
Hast du die DLL selber kompiliert? Da könnte der Funktions-Name ein wenig anders lauten wegen dem stdcall mangling.
Die Deklaration der Funktion lautet ja so:
Codeunsigned long __stdcall RSA_generate_keys(unsigned char *privatekey, unsigned char *publickey, unsigned long *privatekey_length, unsigned long *publickey_length);
Also würde ich das in AutoIt so schreiben:
[autoit]
[/autoit]
$aCall = DllCall($dll, "ULONG", "RSA_generate_keys", "str", "test.privkey", "str", "test.pubkey", "ULONG*", "2048", "ULONG*", "2048")Ungetestet.
-
Hab hier kein Netzwrk hier, aber was zeigt bei dir das Komandozeilen-Programm 'arp' an? (arp -a)
Kannst du damit vllt was anfangen? -
Da brauche ich Links zur DLL und zur Beschreibung der Funktion
-
Versuch mal die 'UCHAR' gegen 'str' auszutauschen.
-
Du musst ja beide Seiten programmieren, also die Seite die den Broadcast abschickt und die Seite die ihn empfängt. Also kannst du dir auch den Port selber auswählen. Am besten einen nicht verwendeten aus dieser Liste. Oder glaubst du, dass dieser Broadcast bereits automatisch passiert? Habe nichts dazu gefunden.
BTW: Wenn das Tool fertig ist, dann hätte ich auch gerne eine Kopie davon -
Schau dir mal die Funktion _GUICtrlTreeView_GetChecked() an. Du brauchst weder das Handle des Controls noch des Items. Die ID reichen, den Rest erledigt die Funktion.
-
Ich schreibe solche Funktionen meistens auf diese Weise:
Spoiler anzeigen
[autoit]Func LoadInternationalStrings()
[/autoit] [autoit][/autoit] [autoit]
Local $strOSLang = ""
If StringRight(@OSLang, 2) = "07" Then
$strOSLang = "GER"
Global _
$str_0001 = "Durchsuchen...", _
$str_0002 = "Anzahl der am Anfang abzuschneidenden Zeichen", _
$str_0003 = "Anzahl der am Ende abzuschneidenden Zeichen", _
$str_0004 = "Suchen nach", _
$str_0005 = "Ersetzen durch", _
$str_0006 = "Dateierweiterungen mit einbeziehen", _
$str_0007 = "Ordner nach dem umbenennen anzeigen", _
$str_0008 = "Starte umbenennen", _
$str_0009 = "Wählen sie einen Ordner aus, dessen Dateien sie umbenennen möchten.", _
$str_0010 = "Benenne ", _
$str_0011 = " um", _
$str_0012 = "Sammle Dateien", _
$str_0013 = "Ein Fehler ist aufgetreten.", _
$str_0014 = "Das sammeln der Daten ist fehlgeschlagen.", _
$str_0015 = "Benenne Unterordner um"Else
[/autoit]
$strOSLang = "ENG"
Global _
$str_0001 = "Browse...", _
$str_0002 = "Count of start digits to trim", _
$str_0003 = "Count of end digits to trim", _
$str_0004 = "Find what", _
$str_0005 = "Replace with", _
$str_0006 = "Consider file extentions", _
$str_0007 = "Open directory after renaming", _
$str_0008 = "Start renaming", _
$str_0009 = "Choose a direcory which contains the files that you want to rename.", _
$str_0010 = "Renaming ", _
$str_0011 = "", _
$str_0012 = "Collecting files", _
$str_0013 = "An error has occurred.", _
$str_0014 = "Collecting files failed", _
$str_0015 = "Rename sub-directories"
EndIf
EndFunc ;==>LoadInternationalStrings -
Wenn es sich um ein Spiel handelt (was ich ja nicht wußte), dann ist dieses Verhalten vielleicht Absicht und ich kann dir nicht mehr weiter helfen.