HAPPY BIRTHDAY!!!
Beiträge von Xenon
-
-
Wow! So funktioniert es
Super!Danke dir vielmals für deine Hilfe!
Bitteschön, man hilft doch wo man kann...LG Xenon
-
Hab es nochmal angepasst (im letzten Post), $aPrograms[0][$i] wird ja schon kurz davor auf "" gesetzt, das hatte ich übersehen...
MfG Xenon
-
Und so?
[autoit]Func ProgDelete()
[/autoit]
$sSelected = GUICtrlRead($lstPrograms)
For $i = 0 To $iSize -1
If $aProgram[0][$i] = $sSelected Then
MsgBox(0, "Löschen", $aProgram[0][$i] & "wurde gelöscht.")
MsgBox(0, "ID", "Programm: " & $aProgram[0][$i] & @CRLF & "Speicherpfad: " & $aProgram[1][$i] )
$aProgram[0][$i] = ""
$aProgram[1][$i] = ""
Global $iArNr = $i
_GUICtrlListBox_DeleteString ($hlstPrograms, _GUICtrlListBox_FindInText ($hlstPrograms, $sSelected))
EndIf
Next
EndFunc -
Dann erstelle mal deine Liste mit
[autoit]$lstPrograms = GUICtrlCreateList("", 14, 72, 120, 305, $WS_BORDER + $WS_VSCROLL)
[/autoit]
Dann ist die "automatische Sortierfunktion" nicht dabei und dann sollten die Indexe(heißt das so?) gleich sein, oder?MfG Xenon
-
Die _GUIListView - Fuktionen werden da nicht funktionieren, da du keine ListView hast.
[autoit]
Da kannst du die ListBox - Funktion_GUICtrlListBox_DeleteString ($hlstPrograms, $Index)
[/autoit]benutzen.
MfG Xenon
-
Hallo DasIch,
also eigentlich benötigst du die Count-Variable in diesem Beispiel nicht:
Ohne Counter
[autoit]; Includes
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>; Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $iSize = 30
Global $aProgram[2][$iSize] ; $aProgram[0][x] = Name $aProgram[1][x] = Pfad
Global $sIniPath = @ScriptDir & "\Settings.ini" ; Pfad zur Ini-Datei; Ini-Datei auslesen
[/autoit] [autoit][/autoit] [autoit]
Global $sProgramsIni = IniRead ($sIniPath, "Programme", "Programm", "") ; Liest die Programmnamen aus der ini aus
Global $aProgramsIni = StringSplit ($sProgramsIni, "|", 2) ; Trennt den String an den | Zeichen
Global $sPathsIni = IniRead ($sIniPath, "Programme", "Pfade", "") ; gleiche Vorgehensweise für Pfade
Global $aPathsIni = StringSplit ($sPathsIni, "|", 2)If UBound ($aProgramsIni) = UBound ($aPathsIni) Then ; Wenn Größe der Arrays gleich, dann ist eindeutige Zuordnung Name - Pfad möglich
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound ($aProgramsIni) - 1
$aProgram[0][$i] = $aProgramsIni[$i] ; In Array speichern
$aProgram[1][$i] = $aPathsIni[$i] ; In Array speichern
Next
EndIf_ArrayDisplay ($aProgram) ;Array anzeigen
[/autoit] [autoit][/autoit] [autoit]$aProgram[0][4] = "blablabla-Name" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Programm)
[/autoit] [autoit][/autoit] [autoit]
$aProgram[1][4] = "blablabla-Pfad" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Pfad)_ArrayDisplay ($aProgram) ; Array nochmal anzeigen
[/autoit] [autoit][/autoit] [autoit]MsgBox (64, "Info", "Die Daten wurden ausgelesen." & @CRLF & "Nun werden Sie zur Demonstration in die Sektion ""Speichern"" geschrieben.")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $sPrograms = ""
[/autoit] [autoit][/autoit] [autoit]
Global $sPaths = ""For $i = 0 To $iSize - 1 ; Gesamtes Array durchlaufen
[/autoit] [autoit][/autoit] [autoit]
If $aProgram[0][$i] <> "" Then ; Wenn kein leerer Eintrag
$sPrograms &= $aProgram[0][$i] & "|" ; Dann an $sProgramms den aktuellen Namen und einen | anfügen
$sPaths &= $aProgram[1][$i] & "|" ; genauso bei den Pfaden verfahren
EndIf
NextIf StringRight ($sPrograms, 1) = "|" Then $sPrograms = StringLeft($sPrograms, StringLen($sPrograms) - 1) ; Wenn letzter Buchstabe = | , dann wird er entfernt.
[/autoit] [autoit][/autoit] [autoit]
If StringRight ($sPaths, 1) = "|" Then $sPaths = StringLeft($sPaths, StringLen($sPaths) - 1) ; gleiches auch für die PfadeMsgBox (64, "Info", "$sPrograms: " & $sPrograms & @CRLF & @CRLF & "$sPaths: " & $sPaths)
[/autoit] [autoit][/autoit] [autoit]IniWrite ($sIniPath, "Speichern", "Programm", $sPrograms) ; in Ini schreiben
[/autoit] [autoit][/autoit] [autoit]
IniWrite ($sIniPath, "Speichern", "Pfade", $sPaths) ; in Ini schreibenMsgBox (64, "Info", "Fertig. Schau dir nun mal die Ini-Datei an (" & $sIniPath & ")")
[/autoit]
Aber es ist praktischer, denn dann kannst du auch vor den Daten aus der Ini schon welche einfügen oder diese öfters auslesen:Vorteile mit Counter
[autoit]; Includes
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>; Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $iSize = 30
Global $aProgram[2][$iSize] ; $aProgram[0][x] = Name $aProgram[1][x] = Pfad
Global $iCounter = 0
Global $sIniPath = @ScriptDir & "\Settings.ini" ; Pfad zur Ini-Datei$aProgram[0][$iCounter] = "erster Eintrag" ; Es wird ein Eintrag am Anfang hinzugefügt (Programm)
[/autoit] [autoit][/autoit] [autoit]
$aProgram[1][$iCounter] = "erster Pfad" ; Es wird ein Eintrag am Anfang hinzugefügt (Pfad)
$iCounter += 1_ArrayDisplay ($aProgram) ;Array anzeigen
[/autoit] [autoit][/autoit] [autoit]; Ini-Datei auslesen
[/autoit] [autoit][/autoit] [autoit]
Global $sProgramsIni = IniRead ($sIniPath, "Programme", "Programm", "") ; Liest die Programmnamen aus der ini aus
Global $aProgramsIni = StringSplit ($sProgramsIni, "|", 2) ; Trennt den String an den | Zeichen
Global $sPathsIni = IniRead ($sIniPath, "Programme", "Pfade", "") ; gleiche Vorgehensweise für Pfade
Global $aPathsIni = StringSplit ($sPathsIni, "|", 2)If UBound ($aProgramsIni) = UBound ($aPathsIni) Then ; Wenn Größe der Arrays gleich, dann ist eindeutige Zuordnung Name - Pfad möglich
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound ($aProgramsIni) - 1
If $iCounter > $iSize - 1 Then ; Bei zu vielen Einträgen Schleife beenden (Größer als Array-Größe)
ExitLoop
EndIf
$aProgram[0][$iCounter] = $aProgramsIni[$i] ; In Array speichern
$aProgram[1][$iCounter] = $aPathsIni[$i] ; In Array speichern
$iCounter += 1
Next
EndIf_ArrayDisplay ($aProgram) ;Array anzeigen
[/autoit] [autoit][/autoit] [autoit]; Ini-Daten erneut in Array einfügen
[/autoit] [autoit][/autoit] [autoit]If UBound ($aProgramsIni) = UBound ($aPathsIni) Then ; Wenn Größe der Arrays gleich, dann ist eindeutige Zuordnung Name - Pfad möglich
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound ($aProgramsIni) - 1
If $iCounter > $iSize - 1 Then ; Bei zu vielen Einträgen Schleife beenden (Größer als Array-Größe)
ExitLoop
EndIf
$aProgram[0][$iCounter] = $aProgramsIni[$i] ; In Array speichern
$aProgram[1][$iCounter] = $aPathsIni[$i] ; In Array speichern
$iCounter += 1
Next
EndIf_ArrayDisplay ($aProgram) ;Array anzeigen
[/autoit] [autoit][/autoit] [autoit]$aProgram[0][$iCounter] = "blablabla-Name" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Programm)
[/autoit] [autoit][/autoit] [autoit]
$aProgram[1][$iCounter] = "blablabla-Pfad" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Pfad)_ArrayDisplay ($aProgram) ; Array nochmal anzeigen
[/autoit] [autoit][/autoit] [autoit]MsgBox (64, "Info", "Die Daten wurden ausgelesen." & @CRLF & "Nun werden Sie zur Demonstration in die Sektion ""Speichern"" geschrieben.")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $sPrograms = ""
[/autoit] [autoit][/autoit] [autoit]
Global $sPaths = ""For $i = 0 To $iSize - 1 ; Gesamtes Array durchlaufen
[/autoit] [autoit][/autoit] [autoit]
If $aProgram[0][$i] <> "" Then ; Wenn kein leerer Eintrag
$sPrograms &= $aProgram[0][$i] & "|" ; Dann an $sProgramms den aktuellen Namen und einen | anfügen
$sPaths &= $aProgram[1][$i] & "|" ; genauso bei den Pfaden verfahren
EndIf
NextIf StringRight ($sPrograms, 1) = "|" Then $sPrograms = StringLeft($sPrograms, StringLen($sPrograms) - 1) ; Wenn letzter Buchstabe = | , dann wird er entfernt.
[/autoit] [autoit][/autoit] [autoit]
If StringRight ($sPaths, 1) = "|" Then $sPaths = StringLeft($sPaths, StringLen($sPaths) - 1) ; gleiches auch für die PfadeMsgBox (64, "Info", "$sPrograms: " & $sPrograms & @CRLF & @CRLF & "$sPaths: " & $sPaths)
[/autoit] [autoit][/autoit] [autoit]IniWrite ($sIniPath, "Speichern", "Programm", $sPrograms) ; in Ini schreiben
[/autoit] [autoit][/autoit] [autoit]
IniWrite ($sIniPath, "Speichern", "Pfade", $sPaths) ; in Ini schreibenMsgBox (64, "Info", "Fertig. Schau dir nun mal die Ini-Datei an (" & $sIniPath & ")")
[/autoit] [autoit][/autoit] [autoit][/autoit]
MfG Xenon -
Also würde das mit der Ini File so aussehen?
[autoit]IniWrite ("programs.ini", "Programme", "Programm", $aProgram[0][$aCounter]&"|")
[/autoit] [autoit][/autoit] [autoit]IniWrite ("programs.ini", "Programme", "Pfad", $aProgram[1][$aCounter]&"|"
[/autoit]
Nicht ganz, denn dann würde nur der eine Wert der Position $aCounter gespeichert werden und nichts aneinandergehängt, wie ich meinte.[autoit]$aSplitProgram[0][] = IniRead("programs.ini","Programme","Programm")
[/autoit] [autoit][/autoit] [autoit]
$aSplitProgram[0][] = StringSplit($aProgram[$aCounter], "|")$aSplitProgram[1][] = IniRead("programs.ini","Programme","Pfad")
[/autoit]
$aSplitProgram[1][] = StringSplit($aProgram[$aCounter], "|")
Hier stimmt auch schonmal die Grundidee mit IniRead und StringSplit. Jedoch solltest du für StringSplit als ersten Parameter den Text aus der Ini verwenden, denn den möchtest du ja splitten.Ich habe dir mal ein Beispiel geschrieben um das Auslesen und Schreiben zu verdeutlichen. Probiere es mal aus und schaue dir den Quelltext mit Kommentaren an. Wenn etwas nicht verständlich ist, dann kannst du gern fragen. Speichere dir aber zum Testen die Ini (im Anhang) im Skriptverzeichnis als Settings.ini damit es klappt und schau sie dir ruhig an.
Spoiler anzeigen
[autoit]; Includes
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>; Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $iSize = 30
Global $aProgram[2][$iSize] ; $aProgram[0][x] = Name $aProgram[1][x] = Pfad
Global $iCounter = 0
Global $sIniPath = @ScriptDir & "\Settings.ini" ; Pfad zur Ini-Datei; Ini-Datei auslesen
[/autoit] [autoit][/autoit] [autoit]
Global $sProgramsIni = IniRead ($sIniPath, "Programme", "Programm", "") ; Liest die Programmnamen aus der ini aus
Global $aProgramsIni = StringSplit ($sProgramsIni, "|", 2) ; Trennt den String an den | Zeichen
Global $sPathsIni = IniRead ($sIniPath, "Programme", "Pfade", "") ; gleiche Vorgehensweise für Pfade
Global $aPathsIni = StringSplit ($sPathsIni, "|", 2)If UBound ($aProgramsIni) = UBound ($aPathsIni) Then ; Wenn Größe der Arrays gleich, dann ist eindeutige Zuordnung Name - Pfad möglich
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To UBound ($aProgramsIni) - 1
If $iCounter > $iSize - 1 Then ; Bei zu vielen Einträgen Schleife beenden (Größer als Array-Größe)
ExitLoop
EndIf
$aProgram[0][$iCounter] = $aProgramsIni[$i] ; In Array speichern
$aProgram[1][$iCounter] = $aPathsIni[$i] ; In Array speichern
$iCounter += 1
Next
EndIf_ArrayDisplay ($aProgram) ;Array anzeigen
[/autoit] [autoit][/autoit] [autoit]$aProgram[0][$iCounter] = "blablabla-Name" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Programm)
[/autoit] [autoit][/autoit] [autoit]
$aProgram[1][$iCounter] = "blablabla-Pfad" ; Es wird noch ein Eintrag ans Ende hinzugefügt (Pfad)_ArrayDisplay ($aProgram) ; Array nochmal anzeigen
[/autoit] [autoit][/autoit] [autoit]MsgBox (64, "Info", "Die Daten wurden ausgelesen." & @CRLF & "Nun werden Sie zur Demonstration in die Sektion ""Speichern"" geschrieben.")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Global $sPrograms = ""
[/autoit] [autoit][/autoit] [autoit]
Global $sPaths = ""For $i = 0 To $iSize - 1 ; Gesamtes Array durchlaufen
[/autoit] [autoit][/autoit] [autoit]
If $aProgram[0][$i] <> "" Then ; Wenn kein leerer Eintrag
$sPrograms &= $aProgram[0][$i] & "|" ; Dann an $sProgramms den aktuellen Namen und einen | anfügen
$sPaths &= $aProgram[1][$i] & "|" ; genauso bei den Pfaden verfahren
EndIf
NextIf StringRight ($sPrograms, 1) = "|" Then $sPrograms = StringLeft($sPrograms, StringLen($sPrograms) - 1) ; Wenn letzter Buchstabe = | , dann wird er entfernt.
[/autoit] [autoit][/autoit] [autoit]
If StringRight ($sPaths, 1) = "|" Then $sPaths = StringLeft($sPaths, StringLen($sPaths) - 1) ; gleiches auch für die PfadeMsgBox (64, "Info", "$sPrograms: " & $sPrograms & @CRLF & @CRLF & "$sPaths: " & $sPaths)
[/autoit] [autoit][/autoit] [autoit]IniWrite ($sIniPath, "Speichern", "Programm", $sPrograms) ; in Ini schreiben
[/autoit] [autoit][/autoit] [autoit]
IniWrite ($sIniPath, "Speichern", "Pfade", $sPaths) ; in Ini schreibenMsgBox (64, "Info", "Fertig. Schau dir nun mal die Ini-Datei an (" & $sIniPath & ")")
[/autoit] [autoit][/autoit] [autoit][/autoit]MfG Xenon
-
Hallo DasIch,
also für Programme in einer Listview hatte ich mir einmal folgende Speicherart ausgedacht:
Die Pfade werden durch | getrennt aneinander gehängt, ebenso alle Programmnamen.
Dann lässt sich das wie folgt in einer .ini abspeichern:Zum Auslesen führst du mit den Pfad- bzw. Titelstring ein StringSplit ($Pfade/Titel, "|") durch und erhältst sie als Array. Das kannst du nun durchlaufen und die Liste erstellen.
MfG Xenon
Edit:
Die Pfade und Titel würde ich in einem zweidimensionalen Array speichern. Dadurch ist ein eindeutiger Bezug Pfad - Programm möglich. Bspw. $Array[0][$x] - Programmname; $Array[1][$x] - Pfad. -
Ich würde sagen, das liegt daran, dass du eine Verknüpfung ausführen willst. Versuche doch mal, die Exe-Datei direkt zu starten (Exe geht auch per Run).
Oder du probierst mal das Skript aus, auf welches ich im 2. Post verwiesen hatte.MfG Xenon
-
HAPPY BIRTHDAY
...und feiert schön!
-
Die Lösung ist, nicht einfach eine Formel hinzukrachen, sondern "Hilfe zur Selbsthilfe"
Ja, das sehe ich ein, sorry. Ich hätte meine Formel erklären sollen, sonst bringt das echt nichts.
MfG Xenon
-
(YEnde - YStart) * 4 + QEnde - QStart + 1
-
Also bei mir funkioniert dein Beispiel auch...
-
Ah, vielen Dank Andy für den Tipp! Das muss ich mir merken.
-
Alles Gute zum Geburtstag, Raupi!
-
Danke GtaSpider!
Dass die Lösung so einfach zu finden ist... Ich hatte nur die Forensuche benutzt und irgendwie nix gefunden :pinch:Xenon
-
Hallo liebe Community,
ich habe ein Skript geschrieben, welches im Hintergrund die Eingabeaufforderung startet (@SW_HIDE) und deren Textausgabe im eigenen CUI-Fenster darstellen soll. Das funktioniert soweit auch ganz gut, jedoch würde ich es auch gerne so machen, dass man die Eingabe des CMD-Befehles direkt in der CUI machen kann. Bisher hatte ich dies durch eine InputBox gelöst, denn in die CUI kann man ja leider nichts reinschreiben.
Gibt es dafür vielleicht doch eine Möglichkeit?
Hier mein Code: (Bitte kompilieren, damit die CUI erstellt wird!)
Spoiler anzeigen
[autoit]#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****; Includes
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <Constants.au3>Global $iPID_CMD = Run (@ComSpec, @SystemDir, @SW_HIDE, $STDOUT_CHILD + $STDIN_CHILD)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
_StdOutRead ()
$sCommand = InputBox ("Eingabe", "CMD-Befehl eingeben", "") & @CRLF
If Not @error Then StdinWrite ($iPID_CMD, $sCommand)WEnd
[/autoit] [autoit][/autoit] [autoit]Func _StdOutRead ()
[/autoit]
Local $sText = ""
Do
$sText &= StdoutRead ($iPID_CMD)
Until StringInStr ($sText, ">")
ConsoleWrite ($sText)
EndFunc
Für Hilfe wäre ich sehr dankbar!MfG Xenon
-
Hallo,
vielleicht hilft dir ja das hier weiter? Bei mir funktioniert es jedenfalls super.
(Erster Google-Treffer für "autoit auflösung ändern" )MfG Xenon
-
Herzlich willkommen und viel Spaß hier im Forum!