Beiträge von BugFix
-
-
Du willst überschreiben, in der Doku steht aber kein Hinweis dass das
- überhaupt möglich ist
- mit welchem Parameter überschrieben werden kannIst eigentlich bei allen Kopierprogrammen üblich, dass du ein Überschreiben explizit angeben mußt.
Da das hier nicht erwähnt wird, nehme ich an es ist nicht möglich.
Mögliche Lösung:
- Ordner mit zu überschreibendem Inhalt umbenennen
- Ordner leer neu erstellen
- Dateien kopieren
- wenn alles erfolgreich den umbenannten Ordner löschen -
Statt SubPattern wird die oft das Wort Backreferenz begegnen. Du kannst immer selbst für Teile des Matches Backreferenzen erzeugen, indem du den betreffenden Teil in Klammern setzt. Diese Backreferenzen werden der Reihe nach numeriert und können so direkt angesprochen werden ($1..$9).
-
Erklärt doch die Hilfe:
ZitatAlles anzeigenParameters
$hGraphics Handle to a Graphics object
$iX1 The X coordinate of the starting point of the line
$iY1 The Y coordinate of the starting point of the line
$iX2 The X coordinate of the ending point of the line
$iY2 The Y coordinate of the ending point of the line
$hPen [optional] Handle to a pen object that is used to draw the arc. If 0, a solid black pen with a width of 1
will be used. -
Bitte hänge deinen Code nicht als Datei an (so viel ist es ja nicht) sondern poste ihn hier mit Tags [ spoiler][ autoit]Dein Skript[ /autoit][/spoiler] (ohne Leerzeichen in den Tags).
Und ein Datensatz reicht nicht als Muster, wir brauchen die unterschiedlichen. Du sagst ja mal steht mehr drin.
Und gib genau an, welche Daten du benötigst. -
wie kann ich in icq
ICQ ist nur ein Protokoll, mit welcher Software nutzt du ICQ? Ich nehme meist Miranda, will ja nicht für jedes Protokoll eine eigene Messenger Software installieren.
-
Eh ich mir den Mund fusselig rede: http://www.autoit.de/index.php?page=Forumrules
Und Tschüß!
[CLOSED]
-
Der Dll-Call könnte ohne Fehler aber trotzdem ohne Erfolg ausgeführt werden.
@error gibt den Fehlerwert des Dll-Calls zurück - nicht die Erfolgskontrolle der Funktion.
Ob die Funktion erfolgreich war ist im Returnwert des Dll-Call ablesbar. Meist ist $ret[0] = 0 für keinen Erfolg und > 0 für Erfolg (manchmal auch umgekehrt, ist in der jeweiligen Funktionsbeschreibung ersichtlich).
Da standardmäßig @error=0 ist für Erfolg (bei AutoIt-Funktionen), wird hier der @error auf $ret[0] gesetzt. Dient zur Einsparung einer Codezeile.
(Ich hoffe, ich hab das so richtig interpretiert) -
Schau dir mal die Funktion _IsPressed im Include an. Dann siehst du, wie es geht.
-
Voeinstalliert war 3.1.2 aber mit nem hex-Editor kenn ich mich garnicht aus

Dann laß besser die Finger von. -
Rein hypothetisch:
Meiner Erfahrung nach ist das Patchen auf eine ältere Version erstmal überhaupt nicht vorgesehen. Die Datei wird einfach abgelehnt. Also mußt du (wenn du dir das zutraust) an der Datei basteln und im Hexeditor die Versionsinfo auf eine höhere als die aktuelle setzen. Mit ein wenig Glück frißt dein IPod die Firmware nun und mit noch mehr Glück funktioniert er sogar.
Aber... ist ja eh "rein hypothetisch".
-
Aber warum löschst du ständig das Ctrl und erstellst es wieder neu? Status HIDE / SHOW ist doch besser geeignet und schont deine Ressourcen.
Edit:
So meine ich, ist doch einfacher und übersichtlicher.
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $label_off, $label_on, $oldState = False, $isOver = False$gui = GUICreate('')
[/autoit] [autoit][/autoit] [autoit]
$label_off = GUICtrlCreateLabel('Label', 10, 10)
$label_on = GUICtrlCreateLabel('Label', 10, 10)
GUICtrlSetFont(-1, 9, 400, Default, 'Times New Roman')
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetState($label_on, $GUI_HIDE)AdlibRegister('_MousePos')
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() =-3Func _MousePos()
[/autoit]
Local $cursor = GUIGetCursorInfo()
If Not StringInStr($label_off & ' ' & $label_on, $cursor[4]) Then
$isOver = False
Else
$isOver = True
EndIf
If $oldState = $isOver Then Return
$oldState = $isOver
Switch $oldState
Case True
GUICtrlSetState($label_off, $GUI_HIDE)
GUICtrlSetState($label_on, $GUI_SHOW)
Case Else
GUICtrlSetState($label_on, $GUI_HIDE)
GUICtrlSetState($label_off, $GUI_SHOW)
EndSwitch
EndFunc -
_FileWriteFromArray()

-
Da ich nicht jeden Tag mit den Dll arbeite, bin ich da auch nicht so fit. Insbesondere, wenn Dll's Arrays als Parameter erwarten, ist dies manchmal etwas verzwickt.
Auf diesem Wege möchte ich gleich mal einen großen Dank an progandy loswerden, der mit seinem komplexen Wissen immer hilfreich zur Seite steht und ohne den dieses hier auch nicht entstanden wäre.
Ich habe ein paar Funktionen geschrieben, die das Erstellen von Dll-Array vereinfachen und ebenfalls Funktionen zum Auslesen von Werten, die man i.A. dann eher zum Debuggen benötigt.
Ich hoffe, dass es für euch auch brauchbar ist.Beispiel
[autoit]#include <StructureConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include 'DLL_Arrays.au3' ; <== hier ggf. anpassen, bei mir sind beide Dateien im selben Ordner
;==================================================================================================
; Struktur: Pointer-Array
;==================================================================================================; === Erstellen Integer Array
[/autoit] [autoit][/autoit] [autoit]
Local $aPtrInt = _PtrArray_Create('int', 10); === Werte setzen
[/autoit] [autoit][/autoit] [autoit]
_PtrArray_SetData($aPtrInt, '10,20,30,40,50,60,70,80,90,100', ','); === Auslesen alle Werte in Console
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('Alle Werte als String, $aPtrInt:' & @CRLF)
_PtrArray_GetData($aPtrInt, 'int'); === Auslesen eines Wertes in Console
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Wert 7 $aPtrInt:' & @CRLF)
_PtrArray_GetData($aPtrInt, 'int', 7); === Auslesen alle Werte in ein Array
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Alle Werte als Array, $aPtrInt:' & @CRLF)
Local $aRet = _PtrArray_GetData($aPtrInt, 'int', -1, 2)
For $i = 0 To UBound($aRet) -1
ConsoleWrite($aRet[$i] & @CRLF)
Next
;==================================================================================================; === Erstellen Zeichenkette Array
[/autoit] [autoit][/autoit] [autoit]
Local $aPtrChar = _PtrArray_Create('char[128]', 5); === Werte setzen
[/autoit] [autoit][/autoit] [autoit]
_PtrArray_SetData($aPtrChar, 'Anna,Lena,Magda,Isabell,Juliane', ','); === Auslesen alle Werte in Console
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Alle Werte als String, $aPtrChar:' & @CRLF)
_PtrArray_GetData($aPtrChar, 'char[128]'); === Auslesen eines Wertes in Console
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Wert 3 $aPtrChar:' & @CRLF)
_PtrArray_GetData($aPtrChar, 'char[128]', 3); === Auslesen alle Werte in ein Array
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Alle Werte als Array, $aPtrChar:' & @CRLF)
$aRet = _PtrArray_GetData($aPtrChar, 'char[128]', -1, 2)
For $i = 0 To UBound($aRet) -1
ConsoleWrite($aRet[$i] & @CRLF)
Next;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Struktur: Byte-Array
;==================================================================================================; === Erstellen Array mit 3 RECT-Strukturen als Elementen
[/autoit] [autoit][/autoit] [autoit]
; Returnwert: ein echtes Array, $aByte[0] enthält die Variable, die an einen Dll-Aufruf zu übergeben wäre
Local $aByteRECT = _ByteArray_Create($tagRECT, 3); === Strukturen befüllen (für RECT mit API-Func: SetRect)
[/autoit] [autoit][/autoit] [autoit]
If Not _WinAPI_SetRect($aByteRECT[1], 20, 30, 200, 300) Then ConsoleWrite('Error: ' & @error & @CRLF)
If Not _WinAPI_SetRect($aByteRECT[2], 40, 50, 240, 350) Then ConsoleWrite('Error: ' & @error & @CRLF)
If Not _WinAPI_SetRect($aByteRECT[3], 60, 70, 260, 370) Then ConsoleWrite('Error: ' & @error & @CRLF); === Auslesen in Console
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite(@CRLF & 'Alle Werte der Strukturen im Byte-Array:' & @CRLF)
For $i = 1 To 3
ConsoleWrite('RECT ' & $i & ':' & @CRLF)
_Struct_GetValue($aByteRECT[$i])
Next;===============================================================================
[/autoit] [autoit][/autoit] [autoit][/autoit]
; Function Name: _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2)
; Description: Befüllt eine RECT-Struktur in einem Aufruf mit Werten
; Parameter(s): $tRECT RECT-Struktur
; $X1, $Y1, $X2, $Y2 Werte des Rectangle
; Return Value(s): Erfolg > 0
; Fehler 0 set @error
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2)
Local $ret = DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), 'long', $X1, 'long', $Y1, 'long', $X2, 'long', $Y2)
If @error > 0 Then Return SetError(1,@error,0)
Return $ret[0]
EndFunc ;==>_WinAPI_SetRectFunktionen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
;===============================================================================
; Function Name: _ByteArrayCreate($sSTRUCT, $iELEMENTS=2)
; Description: Erstellt eine Bytearray-Struktur
; $aBYTE[0] enthält die Variable, die an einen Dll-Aufruf zu übergeben wäre
; Parameter(s): $sSTRUCT String der Struktur
; $iELEMENTS Anzahl der Elemente des Bytearray
; Return Value(s): das erstellte Bytearray
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _ByteArray_Create($sSTRUCT, $iELEMENTS=2)
Local $SIZE = DllStructGetSize(DllStructCreate($sSTRUCT, 1))
Local $aBYTE[$iELEMENTS +1]
$aBYTE[0] = DllStructCreate('byte[' & $SIZE *$iELEMENTS & "]")
Local $ptr = DllStructGetPtr($aBYTE[0])
For $i = 0 To $iELEMENTS -1
$aBYTE[$i+1] = DllStructCreate($sSTRUCT, $ptr + $i*$SIZE)
Next
Return $aBYTE
EndFunc ;==>_ByteArray_Create;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _PtrArray_Create($sSTRUCT, $iELEMENTS=2)
; Description: Erstellt eine Pointerarray-Struktur
; Parameter(s): $sSTRUCT String der Struktur
; $iELEMENTS Anzahl der Elemente des Pointerarray
; Return Value(s): das erstellte Pointerarray
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _PtrArray_Create($sSTRUCT, $iELEMENTS=2)
Local $struct = 'ptr[' & $iELEMENTS & '];'
For $i = 1 To $iELEMENTS
$struct &= $sSTRUCT & ';'
Next
Local $aPTR = DllStructCreate($struct)
For $i = 1 To $iELEMENTS
DllStructSetData($aPTR, 1, DllStructGetPtr($aPTR, $i+1), $i)
Next
Return $aPTR
EndFunc ;==>_PtrArray_Create;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _PtrArray_SetData(ByRef $tSTRUCT, $sDATA, $sDELIM=Default)
; Description: Füllt ein Pointerarray mit Daten
; Parameter(s): $tSTRUCT die Pointerstruktur
; $sDATA die zu setzenden Daten, getrennt durch $sDELIM
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _PtrArray_SetData(ByRef $tSTRUCT, $sDATA, $sDELIM=Default)
If IsKeyword($sDELIM) Then $sDELIM = Opt('GUIDataSeparatorChar')
Local $aData = StringSplit($sDATA, $sDELIM)
For $i = 1 To $aData[0]
If $aData[$i] = '' Then ContinueLoop
DllStructSetData($tSTRUCT, $i+1, $aData[$i])
Next
EndFunc ;==>_PtrArray_SetData;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _PtrArray_GetData(ByRef $aPTR, $sStructType, $iElements=-1, $iRetType=0, $sDelim=Default)
; Description: Einen od. alle Werte eines Pointerarray ausgeben, (in Console, String, Array),
; verweisende Pointer werden als 'Pointer' ausgegeben
; Parameter(s): $aPTR das Pointerarray
; $sStructType String mit dem Typ der verwendeten Struktur
; $iElements 1-basierter Index des zu lesenden Elements, -1(Standard) = alle
; $iRetType Rückgabe als: 0=Console (Standard), 1=Trennzeichenbasierter String, 2=Array
; $sDelim Trennzeichen, mit -1 od. Default Zeichen von Opt('GUIDataSeparatorChar')
; Return Value(s): Gelesene Daten in gewähltem Rückgabetyp
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _PtrArray_GetData(ByRef $aPTR, $sStructType, $iElements=-1, $iRetType=0, $sDelim=Default)
Local $sOut = '', $iCount = 1, $structPtr, $currPtr, $structRead
If IsKeyword($sDelim) Or $sDelim = -1 Then $sDelim = Opt('GUIDataSeparatorChar')
While True
DllStructGetData($aPTR, 1, $iCount)
If @error Then ExitLoop
$iCount += 1
WEnd
$structPtr = DllStructCreate("ptr[" & $iCount -1 & "];", DllStructGetPtr($aPTR, 1))
If $iElements < 1 Then
For $i = 1 To $iCount -1
$currPtr = DllStructGetData($structPtr, 1, $i)
$structRead = DllStructCreate($sStructType, $currPtr)
$sRead = DllStructGetData($structRead, 1)
If IsPtr($sRead) Then $sRead = 'Pointer'
$sOut &= $sRead & $sDelim
Next
Else
$currPtr = DllStructGetData($structPtr, 1, $iElements)
$structRead = DllStructCreate($sStructType, $currPtr)
$sRead = DllStructGetData($structRead, 1)
If IsPtr($sRead) Then $sRead = 'Pointer'
$sOut &= $sRead & $sDelim
EndIf
Switch $iRetType
Case 0 ; ==> console
Return ConsoleWrite(StringTrimRight($sOut, StringLen($sDelim)) & @CRLF)
Case 1 ; ==> delimited string
Return StringTrimRight($sOut, StringLen($sDelim))
Case Else ; ==> array
Return StringSplit(StringTrimRight($sOut, StringLen($sDelim)), $sDelim, 3)
EndSwitch
EndFunc ;==>_PtrArray_GetData;===============================================================================
[/autoit]
; Function Name: _StructGetValue(ByRef $tSTRUCT, $iRetType=0, $sDelim=-1)
; Description: Ausgabe aller Werte einer Struktur (in Console, String, Array),
; verweisende Pointer werden als 'Pointer' ausgegeben
; Parameter(s): $tSTRUCT Struktur aus der die Daten gelesen werden
; $iRetType Rückgabe als: 0=Console (Standard), 1=Trennzeichenbasierter String, 2=Array
; $sDelim Trennzeichen, mit -1 od. Default Zeichen von Opt('GUIDataSeparatorChar')
; Return Value(s): Gelesene Daten in gewähltem Rückgabetyp
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _Struct_GetValue(ByRef $tSTRUCT, $iRetType=0, $sDelim=-1)
Local $sOut = '', $sRead, $i = 1
If IsKeyword($sDelim) Or $sDelim = -1 Then $sDelim = Opt('GUIDataSeparatorChar')
While True
$sRead = DllStructGetData($tSTRUCT, $i)
If @error Then ExitLoop
If IsPtr($sRead) Then $sRead = 'Pointer'
$sOut &= $sRead & $sDelim
$i += 1
WEnd
Switch $iRetType
Case 0 ; ==> console
Return ConsoleWrite(StringTrimRight($sOut, StringLen($sDelim)) & @CRLF)
Case 1 ; ==> delimited string
Return StringTrimRight($sOut, StringLen($sDelim))
Case Else ; ==> array
Return StringSplit(StringTrimRight($sOut, StringLen($sDelim)), $sDelim, 3)
EndSwitch
EndFunc ;==>_Struct_GetValue -
Also wenn die Installation von einer CD erfolgt (ich nehme an die Software darauf ist nicht selbst erstellt), dann ist doch deine Skript ohne jeden Nutzen.
Was soll den User hindern, die setup.exe direkt von der CD zu starten.Falls es doch eigene Software auf der CD ist:
Wieso 2 Dateien? Einfach in die Setup.exe als erste Zeile " If NOT IsADmin() Then Exit MsgBox(0,'', 'BlaBla') "Mir ist deine Dateistruktur nicht ganz klar, aber das Workingdir sollte als Parameter an Run() übergeben werden. Nicht als Makro, sondern als tatsächliches Verzeichnis.
-
aber ich habe vieles extra nicht in arrays gepackt und alles sehr viel kommentiert, damit ich mich nicht in ein paar Jahren fragen muß: Was hast du denn da damals gemacht?
Deshalb kannst du trotzdem ein Array verwenden. Hier mal ein kleines Bsp., wie du ein Array für die Ctrl unter Nutzung von Variablennamen verwenden kannst:
[autoit]; === Variablen mit lesbarem Namen in Array erstellen
[/autoit][autoit][/autoit][autoit]
; === Unsere Nummerierung ergibt den Indexwert für die Zuordnung im Array
Local Enum $Label1, $Input1, $Label2, $Input2, $Button1, $Button2, $CountCtrl
; === Enum startet bei Null, somit fügen wir als letztes $CountCtrl an um nicht selbst die Anzahl für das Array zählen zu müssen
Local $aCtrl[$CountCtrl] = [$Label1, $Input1, $Label2, $Input2, $Button1, $Button2]GUICreate('')
[/autoit][autoit][/autoit][autoit]
$aCtrl[$Label1] = GUICtrlCreateLabel('Label 1', 10, 13)
$aCtrl[$Label2] = GUICtrlCreateLabel('Label 2', 10, 43)
$aCtrl[$Input1] = GUICtrlCreateInput('Input 1', 60, 10)
$aCtrl[$Input2] = GUICtrlCreateInput('Input 2', 60, 40)
$aCtrl[$Button1] = GUICtrlCreateButton('Button 1', 130, 10, 60, 20)
$aCtrl[$Button2] = GUICtrlCreateButton('Button 2', 130, 40, 60, 20)GUISetState()
[/autoit][autoit][/autoit][autoit]While True
[/autoit]
Switch GUIGetMsg()
Case -3
Exit
Case $aCtrl[$Button1]
MsgBox(0, 'Klick', 'Button 1')
Case $aCtrl[$Button2]
MsgBox(0, 'Klick', 'Button 2')
EndSwitch
WEnd -
tool einfach ausführen funktioniert irgentwie nicht
In dem Thread ist als Post #5 die GUI-Version. Nur die INcludes anpassen, dann läuft es.
-
Na dann ganz normal mit FileInstall, mußt natürlich jede Datei angeben, Ordner geht nicht. Ich vermute das war dein Problem - zuviel Schreibarbeit

Das ging mir auch so, deshalb hatte ich mal dieses Tool geschrieben: Install-Script-Generator.
Hab es lange nicht benutzt, evtl. sind Anpassungen an aktuelle AutoItversion erforderlich. -
ich möchte ja nur eine möglichkeit wissen, einen ordner stattdessen zu nehmen
Ich verstehe nicht was du willst.
- Ordner mit Inhalt installieren?
- Ordner kopieren?
oder gar ganz was anderes?Schreib einfach: Ich habe dies und das und möchte als Ergebnis jenes.

-
GUICtrlSetData ändert den Text jedenfalls nicht,
Doch, tut es.$Label = GuiCtrlCreateLabel()
GUICtrlSetData($Label, 'Text')