Um die CPU-Last zu reduzieren, einfach ein Sleep(50) in die While...WEnd-Schleife.
Hm das hab ich jetzt schon häufiger gelesen. Könnte man mal kurz darlegen: Wieso? Bei welchen Schleifen? Spielt der Code in der Schleife eine Rolle?
Um die CPU-Last zu reduzieren, einfach ein Sleep(50) in die While...WEnd-Schleife.
Hm das hab ich jetzt schon häufiger gelesen. Könnte man mal kurz darlegen: Wieso? Bei welchen Schleifen? Spielt der Code in der Schleife eine Rolle?
Naja theoretisch könnte doch der ganze Aufbau mit "," bleiben und nur wenn in einer Variablen ein Zahlenwert übergeben wird wirkt eben das Komma wie ein Punkt.
So stell ich mir das in meinem jugendlichen Leichtsinn vor ![]()
Nagut - die englische Schreibweise war mir jetzt nicht bekannt.
Hierzulande werden Zahlen aber (zum Glück) anders dargestellt (10.000,00 -> englische Schreibweise: 10,000.00 ? <- wie sieht das denn aus?)
Man bräuchte also eine deutsche Autoit version, die Kommas als Dezimaltrennzeichen bei Zahlenwerten vorsieht.
Wird aber vielleicht unsinnig beim Übersetzen in C++ (Basis von Autoit soweit ich weiss) wird dann das Komma wieder zum Punkt.
Wie auch immer - ich passe mein Skript an ![]()
Keine Ahnung - ich kann nur Autoit ![]()
Excel z.B. hat kein Problem (Autoit mit Umwandlung auch nicht aber naja) damit und auch sonst ist es üblich Dezimalstellen mit einem Komma abzutrennen.
Ok danke schonmal für die ganzen Antworten.
Fazit: Ums Umwandeln von 4,5 -> 4.5 komme ich nicht rum?
Genau so behelfe ich mir derzeit. Ist aber doch total umständlich.
Ich muss ja dann das ganze auch wieder zurückkonvertieren.
hey,
ich habe mal wieder ein blödes Problem ![]()
und zwar .. hab ich ein Programm mit Listview und will darin verschiedene Werte addieren (oder subtrahieren).
Allerdings wird beim eingeben mit "," eben nichts gerechnet.
4,5 + 5 -> geht nicht
4.5 + 5 -> 9,5
Aus Verständnisgründen möchte ich aber im Listview die Nachkommastellen eben mit einem Komma abtrennen und nicht mit einem Punkt (wo gibts denn sowas?).
Gibts dafür eine einfache, schnelle Lösung?
Man könnte vor dem Rechenvorgang 4,5 in 4.5 umwandeln und dann das Ergebnis wieder durch ein Komma dastellen.
Ist jetzt aber irgendwie nicht so wie ich mir das vorgestellt hab.
Gibt dafür kein: GUIDataSeparatorChar oder sowas ähnliches?
Gruß nuts
$test = $wowpath & "\wow.exe"
msgbox(1, "", $test)
So? Ich verstehe das Problem nicht so wirklich ![]()
Hey,
ich hab noch paar Vorschläge:
1. Bei der Pfadauswahl einen Button mit FileSelectFolder Funktion einbauen
2. Beim Schließen der Neben GUi-Fenster (Pfadauswahl usw.) sollte man vielleicht nicht das Hauptprogramm beenden.
3. Möglichkeit alle Quellverzeichnisse zu sehen. (einfach: shellexecute auf die .ini - schwieriger: z.B. per Listview)
getestet hab ichs noch nicht - wird aber, soweit ich das gesehen hab, immer besser! ![]()
Dann machs doch wie in meinem Post darüber vorgeschlagen.
Den C:\Sicherung\Savegames Ordner speicherst du in einer Extra Section (der bleibt ja immer gleich) und die Unterordner werden über das auslesen des Keys erstellt (bzw. = Zielverzeichnis für Direcopy)
Also eine Section für den Pfadnamen (und was dir sonst noch so einfällt) und eine Section für die Quellverzeichnisse, diese wird dann mit Inireadsection durchgearbeitet (Key = "Name" des Unterordners --> prüfen ob er erstellt werden muss; Value = Quellverzeichnis).
Also wenn du alles einfach einlesen willst eignet sich vielleicht ein .txt File besser.
Dabei würden folgende Funktionen helfen: Fileopen, Filereadline, Stringsplit und eine While - Wend Schleife (sorry gerade keine Zeit mehr für ein Beispiel)
Soll denn jeder Zielpfad getrennt eingebbar sein? Sinnvoll wäre doch ein Backupfolder mit Unterordnern zum jweiligen Spiel oder?
Soweit warn wir doch schon fast?
[autoit]Alles anzeigen#include <array.au3.>
[/autoit]
Global $ini = IniReadSection(@ScriptDir & "\games.ini", "quelle") ;alle Key der Section in ein Array schreiben
_ArrayDisplay($ini) ;zum besseren Verständnis
For $i = 1 to $ini[0][0]
msgbox(1, "", $ini[$i][0]) ;Col 0 -> Key
msgbox(1, "", $ini[$i][1]) ; Col 1 -> Value
;deine Funktion
nextDie .ini sieht dann so aus:
Code[Quelle] Call of Duty 5=C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision\ Black & White 2=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2So kannst du mit Dircreate erstmal den Ordner erstellen
[autoit]Dircreate($ziel & "\" & $ini[$i][0])
[/autoit]. Anschließend mit Dircopy die Files kopieren usw.
Jetzt fehlen noch die entsprechenden Infos für den Zielpfad. Wie soll das genau aussehen? Für jedes Ziel eine eigener Pfad? Oder für alle Spiele ein Pfad mit Unterordnern?
edit \ Habs mal vorläufig für die Quelle in dein Script eingebaut
#include <array.au3.> ;für _Arraydisplay
#include <GUIConstants.au3>
;####################GUI Zone######################
#Region ### START Koda GUI section ### Form=d:\daten\autoit\koda\forms\backup1.kxf
$Form1_1 = GUICreate("Savegame Backup Programm", 633, 306, 119, 455)
$Label1 = GUICtrlCreateLabel("Savegame Backup Programm", 160, 32, 329, 39)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Sichern = GUICtrlCreateButton("Sichern", 88, 120, 201, 57, 0)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Zielpfad = GUICtrlCreateButton("Zielpfad", 344, 120, 201, 57, 0)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Pfadewechseln = GUICtrlCreateButton("Savegame Pfade ändern/hinzufügen!", 88, 192, 201, 25, 0)
$Fortschritt = GUICtrlCreateProgress(88, 248, 457, 33)
$Zielwechsel = GUICtrlCreateButton("Zielpfad ändern!", 344, 192, 201, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;###################GUI Zone#######################
;###################SubGUI#########################
#Region ### START Koda GUI section ### Form=D:\Daten\AutoIt\Koda\Forms\BackupSub.kxf
$SubGUI = GUICreate("Zielpfad ändern!", 350, 116, 444, 326)
$Pfad = GUICtrlCreateInput("Pfad", 16, 32, 313, 21)
$SubGuiText = GUICtrlCreateLabel("Bitte den genauen (!) Pfad hier reinschreiben! ", 16, 8, 220, 17)
$SubGuiText2 = GUICtrlCreateLabel("Bsp. C:\Sicherung\Games", 96, 96, 129, 17)
$SubButton = GUICtrlCreateButton("Ändern!", 48, 64, 249, 25, 0)
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
;#####################SubGUI########################
$AlterPfad = IniRead ("Savegames.ini", "Standart", "Ziel", "Error")
If $AlterPfad = "Error" Then
MsgBox (1, "Fehler", "Der Standart Pfad kann nicht ausgelesen werden.")
Exit
EndIf
;##################Schleife#########################
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Zielpfad
MsgBox (0, "Ziel", "Der Standart Zielpfad ist: "&$AlterPfad)
Case $Sichern
Global $ini = IniReadSection(@ScriptDir & "\games.ini", "quelle") ;alle Keys der Section in ein Array schreiben
_ArrayDisplay($ini) ;zum besseren Verständnis
For $i = 1 to $ini[0][0]
msgbox(1, "", $ini[$i][0]) ;Col 0 -> Key
msgbox(1, "", $ini[$i][1]) ; Col 1 -> Value
DirCopy ( $ini[$i][1], $Ziel, 1) ; beim Ziel weiss ich nicht genau wie du es haben willst - deine If Abfragen einfach noch mit in die For Schleife packen
next
Case $Pfadewechseln
ShellExecute ( @ScriptDir & "\Savegames.ini" )
Case $Zielwechsel
GUISetState(@SW_SHOW, $SubGUI)
Case $SubButton
$IniOffen = FileOpen ("Savegames.ini",0)
$AktuelleIni = FileRead ($IniOffen)
$IniGeschlossen = FileClose ($IniOffen)
$NeuerPfad = GUICtrlRead ($Pfad)
$Ersetzen = StringReplace ($AktuelleIni, $AlterPfad, $NeuerPfad)
MsgBox (1, "Erfolg", $Ersetzen)
FileDelete (@ScriptDir&'\Savegames.ini')
FileWrite ("Savegames.ini", $Ersetzen)
GUISetState (@SW_HIDE, $SubGUI)
EndSwitch
WEnd
;################Schleife###########################
[/autoit]Hier das gewünschte Beispiel:
[autoit]#include <array.au3.>
Global $ini = IniReadSection(@ScriptDir & "\games.ini", "quelle") ;alle Key der Section in ein Array schreiben
_ArrayDisplay($ini) ;zum besseren Verständnis
For $i = 1 to $ini[0][0]
msgbox(1, "", $ini[$i][0]) ;Col 0 -> Key
msgbox(1, "", $ini[$i][1]) ; Col 1 -> Value
;deine Funktion
next
Die .ini sieht dann so aus:
[Quelle]
Call of Duty 5=C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision\
Black & White 2=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2
So kannst du mit Dircreate erstmal den Ordner erstellen
[autoit]Dircreate($ziel & "\" & $ini[$i][0])
[/autoit]. Anschließend mit Dircopy die Files kopieren usw.
Per Dirgetsize kann man auch Quell und Zielordner vergleichen um quasi eine Art Überprüfung des Kopiervorgangs zu haben.
Wenns noch Fragen gibt einfach melden.
Könnt man noch optimieren indem man alle Quellpfade in eine Section schreibt und dann mit Inireadsection jeden Eintrag nacheinander durchgeht.
Hat auch den Vorteil, dass man nachträglich einfach Einträge hinzufügen kann ohne im Quellcode rumzupfuschen.
Ist eigentlich nicht so schwierig, bei Bedarf kann ich auch nachher ein Beispiel posten (hab kein autoit hier am pc).
edit\ Du willst also einen Ordner im Zielpfad mit dem Namen der Section (bei meinem Vorschlag wäre das dann der Key) erstellen und dort die jeweiligen Daten ablegen?
Bei deiner Variante hilft IniReadSectionNames - bei meinem Vorschlag reicht Inireadsection, die Info über den Ordnernamen steht auch schon im Array (der Key).
Ich weiss nicht ob ichs richtig verstehe: Das Skript soll immer wieder die gleiche Nachricht in den Chat schreiben bis der Chat von dir wieder in den Vordergrund geholt wird?
Alles anzeigen
Hier der CodeSpoiler anzeigen
[autoit]HotKeySet ("{F4}", "afk")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
while 1
sleep(100)
WEndFunc afk()
[/autoit] [autoit][/autoit] [autoit]
$title = wingettitle ("- Chat")while 1
[/autoit]
Do
Winactivate ( " - Chat" ) ;hier wird das Fenster im zweiten Durchgang nicht mehr gefunden
WInwaitactive (" - Chat")
Send ("Hallo,ich bin gerade beschäftigt!")
send ("{enter}")
sleep (100)
Send ("Ich werde sobald ich Zeit hab antworten!")
Send ("{enter}")
FileWrite ( "chat.txt",$title)
Sleep (100)
WinClose ( " - Chat" ) ;hier wird das Fenster geschlossen
Until WinWaitActive ( " - Chat")
Wend
EndFunc
Bei mir gehts - _NewGamePressed() hat nen "Syntaxfehler" (?).
[autoit]
Func _NewGamePressed()
GUISetState( @SW_HIDE,$SingleplayerGui)
Sleep(100)
GUISetState( @SW_SHOW, $NewGameGui)
EndFunc
deine Version
[autoit]Func _NewGamePressed()
GUISetState($SingleplayerGui, @SW_HIDE)
Sleep(100)
GUISetState($NewGameGui, @SW_SHOW)
EndFunc
Func _NewGameGUIBackPressed()
GuiSetState($NewGameGui, @SW_HIDE)
Sleep(100)
GUISetState($MainGUI, @SW_SHOW)
EndFunc
GUIRegisterMsg($WM_NOTIFY, "_DoubleClickOnListView")
; usw.
Func _DoubleClickOnListView($hWnd, $Msg, $wParam, $lParam);Die Eigentliche Funktion
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
If $wParam = $hListView Then;Wenn der Klick auf das ListView ging..
If $event = $N_DBLCLK Then;.. Wenn es ein DoppelKlick war
; deine Funktion wie oben beschrieben mit _GUICtrlListView_GetItemSelected
EndIf
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>_DoubleClickOnListView
oder meinst du sowas? ist jetzt für einen Doppelklick, lässt sich aber auch für einen normalen Klick umbauen (IF $event = ..... (steht hier drin: <WindowsConstants.au3>)
https://autoit.de/index.php?page=Thread&threadID=8902
Hat mir sehr geholfen das Listview besser zu verstehen.
Bei mir wirds angezeigt, sicher das der Pfad stimmt?