In der Schleife einfügen:
[autoit]If $i = 2 Then ContinueLoop
[/autoit]In der Schleife einfügen:
[autoit]If $i = 2 Then ContinueLoop
[/autoit]Hier schreibst du die Zeile:
[autoit]if ($Ausgeben == 1) then
FileWriteLine($Output, $Zeile_original)
endif
Einfach eine Leerzeile dahinter setzen:
[autoit]if ($Ausgeben == 1) then
FileWriteLine($Output, $Zeile_original & @CRLF)
endif
Hi,
vielleicht bietet diese UDF-Sammlung all jenen, die mit Arrays auf Kriegsfuß stehen, einen kleinen Lichtblick. ![]()
Ich habe hier die Arrayfunktionen so gestaltet, dass der Zugriff ananlog zur objektbasierten ArrayList erfolgt. Da für das Objekt das nicht zwingend installierte NET-Framework erforderlich ist, ist diese reine AutoIt-Lösung sicher eine gute Ergänzung.
Für einige Funktionen ist die Angabe der CaseSensitivity erforderlich. Da dieses Verhalten für mehrere Funktionen gilt, wird diese Eigenschaft für das gesamte Array deklariert.
EDIT
Eh ich's vergesse, der Vorteil für 'Array-Problematiker'
: Keinerlei Größenverwaltung notwendig, Index muß nicht verwendet werden.
_AssocArray_Create(CaseSensitive)
Erstellt ein Assoziatives Array mit der definierten Eigenschaft.
Mit -1 = Nicht Sensitive (Standard), mit 1 = Case Sensitive.
Diese ist gültig für alle auf dieses Array angewendete Funktionen.
Das Setzen der Eigenschaft in den HighWord-Bereich von Array[0] dient der Unterscheidung zu
'normalen' Array. -1 statt 0 deshalb, da _WinAPI_HiWord() 0 zurückgibt, wenn kein DWORD-Wert
abgefragt wird.
Gibt das Handle des Array zurück.
_AssocArray_Pref(Handle)
Gibt die Eigenschaft des Assoziativen Array zurück.
_AssocArray_Add(Handle, Wert)
Fügt einen Wert zum Array hinzu.
_AssocArray_AddColl(Handle, Kollektion, Trennzeichen, Ignore_0)
Fügt eine Kollektion (1D-Array od. mit Trenner gesplitteter String) zum Array hinzu.
Standardtrennzeichen (Zeichen von Opt("GUIDataSeparatorChar"))
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_Insert(Handle, Index, Wert)
Fügt einen Wert am gegebenen Index ein.
_AssocArray_Count(Handle)
Gibt die Anzahl der Elemente im Array zurück.
_AssocArray_DelByName(Handle, Wert, All)
Löscht den ersten gefundenen Eintrag, der mit Wert übereinstimmt.
Mit Flag All auf 'True' werden alle dem Wert entsprechenden Einträge gelöscht.
_AssocArray_DelByIndex(Handle, Index)
Löscht den Eintrag am übergebenen Index.
_AssocArray_Clear(Handle)
Löscht alle Elemente aus dem Array.
_AssocArray_Sort(Handle, Richtung)
Sortiert alle Elemente des Array (Standard: aufsteigend).
_AssocArray_ToString(Handle, Trennzeichen)
Gibt einen String mit allen Elementen,
getrennt durch Trennzeichen (Zeichen von Opt("GUIDataSeparatorChar")), zurück.
_AssocArray_GetItem(Handle, Index)
Gibt den Inhalt an der Indexposition zurück.
_AssocArray_GetRange(Handle, Index, Anzahl)
Gibt ab Indexposition eine Anzahl Elemente als Assoziatives Array zurück.
Eigenschaft des abgefragten Array wird übernommen.
_AssocArray_SetRange(Handle, EinfügeArray, Index, Ignore_0)
Kopiert die Elemente eines (Assoziativen)Array über einen Bereich von Elementen im Array.
Enthält das EinfügeArray mehr Elemente als ab Index überschrieben werden können,
wird das Basisarray vergrößert.
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_InsertRange(Handle, EinfügeArray, Index, Ignore_0)
Fügt an der Indexposition ein (Assoziatives)Array ein.
Für das eingefügte Array gilt die Eigenschaft des Zielarray.
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_Search(Handle, Wert)
Gibt TRUE zurück, wenn Wert im Array enthalten, sonst FALSE.
_AssocArray_GetIndex(Handle, Wert)
Gibt den Index des ersten gefundenen Eintrags zurück, der mit Wert übereinstimmt.
_AssocArray_LastIndexOf(Handle, Wert, Von, Bis)
Gibt den nullbasierten Index des letzten Vorkommens eines Werts im Array bzw. in einem Abschnitt davon zurück.
_AssocArray_RemoveRange(Handle, Index, Anzahl)
Löscht eine Anzahl Elemente ab Indexposition.
Wird keine Anzahl übergeben, oder überschreitet die Anzahl die Arraygrenze,
werden ab Indexposition alle restlichen Elemente gelöscht.
_AssocArray_Reverse(Handle, Von, Bis)
Kehrt die Reihenfolge der Elemente im angegebenen Bereich um.
#include <AssocArray.au3>
; Array erstellen, Standardeigenschaft 'Nicht Case Sensitive'
$array = _AssocArray_Create()
ConsoleWrite('Eigenschaft: ' & _AssocArray_Pref($array) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]; Element hinzufügen
_AssocArray_Add($array, 'AutoIt')
; Inhalt als String ausgeben, Trennzeichen von Opt("GUIDataSeparatorChar")
ConsoleWrite('Inhalt als String: ' & _AssocArray_ToString($array) & @CRLF)
; Kollektion als String hinzufügen
_AssocArray_AddColl($array, 'mama|papa|oma|opa|onkel|tante|mama')
ConsoleWrite('AddColl String: ' & _AssocArray_ToString($array) & @CRLF)
; Kollektion als Array einfügen
Local $ar[3] = [1,2,3]
_AssocArray_AddColl($array, $ar, Default, False)
ConsoleWrite('AddColl Array: ' & _AssocArray_ToString($array) & @CRLF)
; Vorkommen eines Wertes prüfen
ConsoleWrite('Wert enthalten: ' & _AssocArray_Search($array, 'opa') & @CRLF)
; Wert einfügen an Indexposition
_AssocArray_Insert($array, 5, 'mama')
ConsoleWrite('Insert an Index 5: ' & _AssocArray_ToString($array) & @CRLF)
; Wert von Indexposition zurückgeben
ConsoleWrite('Wert von Index 4: ' & _AssocArray_GetItem($array, 4) & @CRLF)
; Index für einen Wert zurückgeben
ConsoleWrite('Index des Wertes, erstes Auftreten: ' & _AssocArray_GetIndex($array, 'mama') & @CRLF)
; Index für einen Wert, letztes Auftreten
ConsoleWrite('Index des Wertes, letztes Auftreten: ' & _AssocArray_LastIndexOf($array, 'mama') & @CRLF)
; Bereich als Array zurückgeben
$b = _AssocArray_GetRange($array, 2, 4)
ConsoleWrite('Das Array: ' & _AssocArray_ToString($array) & @CRLF)
ConsoleWrite('Der selektierte Bereich: ' & _AssocArray_ToString($b) & @CRLF)
; Bereich überschreiben
Local $c[3] = ['X','Y','Z']
_AssocArray_SetRange($array, $c, 6, False)
ConsoleWrite('ab Index 6 überschrieben: ' & _AssocArray_ToString($array) & @CRLF)
; Array sortieren
; Kopie erstellen
$copy_ar = $array
_AssocArray_Sort($array)
ConsoleWrite('sortiert aufsteigend: ' & _AssocArray_ToString($array) & @CRLF)
_AssocArray_Sort($copy_ar, 1)
ConsoleWrite('sortiert fallend: ' & _AssocArray_ToString($copy_ar) & @CRLF)
; Wert am Index löschen
_AssocArray_DelByIndex($array, 3)
ConsoleWrite('an Index 3 gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Wert nach Namen löschen, erstes Auftreten
_AssocArray_DelByName($array, 'mama')
ConsoleWrite('erstes Auftreten "mama" gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Wert nach Namen löschen, jedes Auftreten
_AssocArray_DelByName($array, 'mama', True)
ConsoleWrite('jedes Auftreten "mama" gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Reihenfolge im Array umkehren
_AssocArray_Reverse($array)
ConsoleWrite('umgedreht: ' & _AssocArray_ToString($array) & @CRLF)
Hi,
verwende meinen CountDown, mit der Option heraufzählen.
Hi,
nun kann ich mir das Elend nicht länger mit ansehen ![]()
Du hattest beim Einfügen der ListviewSubelemente immer in Index 0 geschrieben ![]()
Hier mal die angepaßte Version, leicht optimiert:
HotKeySet("{ESC}", "Terminate")
[/autoit] [autoit][/autoit] [autoit]$pfad = FileSelectFolder("Wählen Sie den Ordner.", "")
;$dateityp = InputBox("Auswahl der Endung / Des Dateityps", "Bitte geben Sie hier die 3stellige Dateiendung des Dateityps an. lwp / doc / odt", "", "", 500, 10)
; Liest den Pfad und den Dateitypen ein
;=======================================================================================================================
#include <array.au3>
#include <file.au3>
Global $dateityp1 = "odt"
Global $dateityp2 = "doc"
Global $dateityp3 = "odt"
Global $alwp = _GetFilesFolder_Rekursiv($pfad, $dateityp1, 0)
Global $adoc = _GetFilesFolder_Rekursiv($pfad, $dateityp2, 0)
Global $aodt = _GetFilesFolder_Rekursiv($pfad, $dateityp3, 0)
Local $max = $alwp[0]
If $adoc[0] > $max Then $max = $adoc[0]
If $aodt[0] > $max Then $max = $aodt[0]
Global $arOut[$max][3]
For $i = 1 To UBound($alwp) -1
$arOut[$i-1][0] = $alwp[$i]
Next
For $i = 1 To UBound($adoc) -1
$arOut[$i-1][1] = $adoc[$i]
Next
For $i = 1 To UBound($aodt) -1
$arOut[$i-1][2] = $aodt[$i]
Next
;=======================================================================================================================
#include <GuiConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $GUI, $hImage, $hListView, $lwp, $doc, $odt
$GUI = GUICreate("Vergleichsliste", 900, 600)
$hListView = _GUICtrlListView_Create ($GUI, "", 2, 2, 894, 568)
_GUICtrlListView_SetExtendedListViewStyle ($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
GUISetState()
; GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
; Load images
;~ $hImage = _GUIImageList_Create ()
;~ _GUIImageList_Add ($hImage, _GUICtrlListView_CreateSolidBitMap ($hListView, 0xFF0000, 16, 16))
;~ _GUIImageList_Add ($hImage, _GUICtrlListView_CreateSolidBitMap ($hListView, 0x00FF00, 16, 16))
;~ _GUIImageList_Add ($hImage, _GUICtrlListView_CreateSolidBitMap ($hListView, 0x0000FF, 16, 16))
;~ _GUICtrlListView_SetImageList ($hListView, $hImage, 1)
; Add columns
_GUICtrlListView_InsertColumn ($hListView, 0, "lwp", 100)
_GUICtrlListView_InsertColumn ($hListView, 1, "doc", 100)
_GUICtrlListView_InsertColumn ($hListView, 2, "odt", 100)
; Add items
For $i = 0 To UBound($arOut) -1
_GUICtrlListView_AddItem ($hListView, $arOut[$i][0], 0)
_GUICtrlListView_AddSubItem ($hListView, $i, $arOut[$i][1], 1)
_GUICtrlListView_AddSubItem ($hListView, $i, $arOut[$i][2], 2)
Next
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
; ################################### F U N K T I O N E N ###################################
[/autoit] [autoit][/autoit] [autoit]Func Terminate()
Exit
EndFunc
;==================================================================================================
; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
; Description: Rekursive Auflistung von Dateien und/oder Ordnern
; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
; optional: $iRetType 0 gibt Array, 1 gibt String zurück
; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
; 0 -@CRLF (Standard); 1 -@CR; 2 -@LF; oder beliebiges Zeichen
; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles,1), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
If $aOut[0] <> 0 Then $aOut[$aOut[0]] = StringTrimRight($aOut[$aOut[0]], 1)
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
$strFiles &= $file.Path & $Delim
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc
War etwas unübersichtlich, wegen der fehlenden Einzüge.
Also die GUIGetMsg-Abfrage war OK, aber du verwendest WinSetState statt GUISetState. Somit kann die zweite GUI niemals angezeigt werden.
Außerdem mußt du den Status der Checkboxen auslesen (GUICtrlRead).
Du hast mein Bsp. nicht richtig angeschaut.
Du mußt mit $msg[1] das Win-Handle abfragen und innerhalb dieser Abfrage jeweils mit $msg[0] die zugehörigen ID's.
Standardfunktion: FileGetShortcut()
er will den Button ( $Button2) aus der zweiten Gui nicht erkennen.
Falls du mit GUIGetMsg() arbeitest, mußt du die erweiterte Form verwenden: GUIGetMsg(1)
Dann bekommst du auslösendes ID + GUI zurück. Schau mal in die Hilfe.
Geht wesentlich einfacher, wenn man mit OnEventMode arbeitet, da weist du Funcs zu und gut ist's ![]()
Hier mal Bsp. zu beiden Varianten:
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]$gui1 = GUICreate('GUI 1')
$btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
$gui2 = GUICreate('GUI 2')
$btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While 1
$msg = GUIGetMsg(1)
Switch $msg[1] ; Window Handle
Case $gui1
Switch $msg[0] ; Event
Case $GUI_EVENT_CLOSE
Exit
Case $btn1
GUISetState(@SW_HIDE, $gui1)
GUISetState(@SW_SHOW, $gui2)
EndSwitch
Case $gui2
Switch $msg[0]
Case $GUI_EVENT_CLOSE
GUISetState(@SW_SHOW, $gui1)
GUISetState(@SW_HIDE, $gui2)
Case $btn2
MsgBox(0, '', 'Button 2 geklickt')
EndSwitch
EndSwitch
WEnd
#include <GUIConstants.au3>
Opt("GUIOnEventMode", 1) ; OnEventMode = EIN
$gui1 = GUICreate('GUI 1')
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI1_close')
$btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20)
GUICtrlSetOnEvent(-1, 'ClickButton1')
$gui2 = GUICreate('GUI 2')
GUISetOnEvent($GUI_EVENT_CLOSE, 'GUI2_close')
$btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20)
GUICtrlSetOnEvent(-1, 'ClickButton2')
GUISetState(@SW_SHOW, $gui1)
[/autoit] [autoit][/autoit] [autoit]While True
Sleep(100)
WEnd
Func GUI1_close()
Exit
EndFunc
Func GUI2_close()
GUISetState(@SW_HIDE, $gui2)
EndFunc
Func ClickButton1()
GUISetState(@SW_SHOW, $gui2)
EndFunc
Func ClickButton2()
MsgBox(0, '', 'Button 2 geklickt')
EndFunc
Man kann Tastendrücke zählen - aber da dass auch für Keylogger mißbraucht werden kann, bleibt der Code außen vor.
Habe ich mal verwendet bei meiner IntelliSenseBox.
Mußt du nur auf deine Bedürfnisse anpassen.
Öhm... dazu hatte ich mal 'ne Suchfunktion gebastelt, die du als erster kommentiert hattest. ![]()
ListView - Suche
Du mußt die Länge auslesen, wenn du den Button 'Weiter' drückst. Stimmt die Länge, führst du den weiteren Code aus, ansonsten Fehlermeldung an User und erneute Eingabe anfordern.
Geht z.B. auch so:
[autoit]$input = GUICtrlCreateInput(...)
$max = ..
$min = ..
If StringLen(GUICtrlRead($input)) < $min Or StringLen(GUICtrlRead($input)) > $max Then _
MsgBox(0, 'Fehler', 'Eingabe hat nicht die richtige Länge!')
Für Label kannst du nur Max, aber nicht Min festlegen.
Wenn ich mich richtig erinnere, hat Stilgar ein Tool geschrieben, dass alle Links, Forms etc. aus einer ff-Site ausliest. Bemühe mal die SuFu.
Das Schema ist völlig OK - so habe ich auch meine notepad.exe zur Notepad++.exe mutieren lassen ![]()
Sollte keine Probleme geben.
Hi eukalyptus: wärst' ein Mädel, würde ich dir 'nen Knutscher geben
- genau das bringts.
Hi,
der Titel beinhaltet schon mein Problem,
ich erstelle eine GUI wie folgt:
$gui = GUICreate("Test", @DesktopWidth, @DesktopHeight, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU, $WS_MAXIMIZE))
[/autoit]
Diese GUI dient als Hintergrund für eine Anwendung und soll deshalb den Bildschirm ausfüllen und in der Größe unveränderbar sein. Sie beinhaltet ausschließlich Menü-Controls.
Jedoch wird bei Doppelklick auf die Titelleiste die Größe geringfügig (ca. 10 Pixel in der Höhe) verändert.
Ich habe bisher keinen Style gefunden, der das unterdrückt.
Bin für jede Idee dankbar.
sondern die rshift eingabe durch eine l shift eingabe ersetzen
Ist nicht ohne weiteres möglich. Dazu müßtest du einen Hook verwenden um die Tatstatureingaben abzufangen, zu prüfen und ggf. zu verändern und erst dann im PC weiterzuverarbeiten. Das ist aber auch bei mir nur graue Theorie
- damit habe ich mich in AutoIt noch nicht befaßt.