[autoit]
$oExcel.ActiveSheet.Columns("A:E").AutoFit
[/autoit]$oExcel.ActiveSheet.Columns("A:E").AutoFit
[/autoit]Hallo,
nett gemacht. Ich hätte das aber auf diese Art gemacht:
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Example()
[/autoit] [autoit][/autoit] [autoit]Func Example()
GUICreate("My GUI group") ; will create a dialog box that when displayed is centered
GUICtrlCreateGroup("Group 1", 10, 60, 90, 140)
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)
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)
GUICtrlCreateRadio("Radio 1", 290, 90, 50, 20)
GUICtrlCreateRadio("Radio 2", 290, 110, 60, 50)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
GUISetState() ; will display an empty dialog box
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
While 1
Local $msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc ;==>Example
Func _GuiCtrlCreateGroup($sText, $iX, $iY, $iW, $iH, $iRectCol = -1, $iFontCol = -1, $iFontAttribute = -1)
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:
unsigned 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]
$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:
Func LoadInternationalStrings()
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
$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.
Hab mal einen kleinen Test gemacht. Das funktioniert einwandfrei und wie erwartet. Vielleicht hilft dir das ja weiter.
Hier die Skripts:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#NoTrayIcon
For $i = 1 to 10
ConsoleWrite("Write to StdOut: " & $i & @CRLF)
ConsoleWriteError("Write to StdErr: " & $i & @CRLF)
Sleep(2000)
Next
[spoilerConsole-Test-Programm]
[autoit]#include "Constants.au3"
[/autoit][autoit][/autoit][autoit]Global $sErr, $sOut
Global $sExe = "Console-Progreamm.exe"
Global $iPID = Run($sExe, "", @SW_SHOW, $STDOUT_CHILD + $STDERR_CHILD)
While ProcessExists($sExe)
$sErr = StderrRead($iPID)
$sOut = StdoutRead($iPID)
If $sErr <> "" Then ConsoleWrite("Vom StdErr gelesen: " & $sErr)
If $sOut <> "" Then ConsoleWrite("Vom StdOut gelesen: " & $sOut)
WEnd
[/spoiler]
Außerdem: Schau dir mal den zweiten Parameter von GUICtrlSetData() an. ![]()
Das heißt, dass das Programm alles richtig macht.
Verwendest du in deinem Skript auch beides: StderrRead und StdoutRead ?
Und verwendest du beim Run-Befehl auch beide Flags: $STDERR_CHILD + $STDOUT_CHILD ?
Man muss unterscheiden zwischen StderrRead und StdoutRead, anscheinend schreibt das Programm die Fehler auf den StdOut.
Probier in der Console mal das: "Programm.exe >> Textdatei.txt 2>&1"
Aha, dieses blöde Null-Zeichen! ![]()
So geht's auch:
[autoit]$a = "Hallo " & Chr(0)
$b = "Welt"
MsgBox(0, "", $a & $b)
MsgBox(0, "", String($a) & String($b))
Auch von mir noch alles, alles Gute zum Geburtstag, Alina und auch die anderen Geburtstagskinder!
Hier die CURL-UDF in AutoIt: http://www.autoitscript.com/forum/topic/13…ax/#entry962199
_GDIPlus_Startup() kann man immer ausführen, es wird doch nur noch ein zusätzlicher Zähler hochgezählt wenn man GDIP startet. Wenn man _GDIPlus_Startup() 20x ausführt, dann wird auch erst beim zwanzigsten Mal _GDIPlus_Shutdown() wirklich GDIP beendet.