[Frage] Was meint ihr ?

06/29/2012 21:16 xDeadless#1
Also, ich habe letztens angefangen mich ein wenig mit AutoIT zu befassen.

da habe ich mich nach ein paar Videos an mein eigenes mini Projekt gewagt :D
Also hab ich mir gedacht, schreib ich mir ein Game Starter ...

Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Headline = GUICreate("Game Starter", 270, 360, 455, 185)
$Help = GUICtrlCreateMenu("&Help")
$Sound = GUICtrlCreateMenu("Sound"&@TAB&"", $Help)
$Sound_100 = GUICtrlCreateMenuItem("Sound ON"&@TAB&"Shift+Ctrl+5 (ZEHNERTASTATUR)", $Sound)
$Sound_0 = GUICtrlCreateMenuItem("Sound OFF", $Sound)
$Info = GUICtrlCreateMenuItem("Info"&@TAB&"", $Help)
$system = GUICtrlCreateMenu("&Systemstart")
$herunterfahren = GUICtrlCreateMenuItem("Herunterfahren"&@TAB&"Ctrl+Alt+D", $system)
$restart = GUICtrlCreateMenuItem("Restart"&@TAB&"", $system)
$abmelden = GUICtrlCreateMenuItem("Abmelden", $system)
GUISetBkColor(0x3399FF)
$Anno_1 = GUICtrlCreateButton("Start", 120, 40, 97, 25)
$Ann = GUICtrlCreateButton("Start", 120, 72, 97, 25)
$Residen = GUICtrlCreateButton("Start", 120, 104, 97, 25)
$Minecraf = GUICtrlCreateButton("Start", 120, 136, 97, 25)
$Anno = GUICtrlCreateLabel("Anno 2070", 16, 48, 56, 17)
$Anno_2 = GUICtrlCreateLabel("MW 2", 18, 78, 56, 17)
$LOCO = GUICtrlCreateLabel("SPMinecraft", 18, 180, 60, 17)
$Resident = GUICtrlCreateLabel("Resident Evil", 16, 115, 66, 17)
$Close = GUICtrlCreateButton("Close", 16, 280, 201, 41)
$SP_Minecraft = GUICtrlCreateButton("Start", 120, 168, 97, 25)
$Loc = GUICtrlCreateButton("Start", 120, 197, 97, 25)
$Lastchaos = GUICtrlCreateButton("Start", 121, 232, 97, 25)
$Minecraft = GUICtrlCreateLabel("Minecraft", 16, 144, 48, 17)
$LO = GUICtrlCreateLabel("LOCO", 24, 208, 33, 17)
$Last = GUICtrlCreateLabel("Generic name", 24, 240, 70, 17)
Dim $Headline_AccelTable[2][2] = [["^+{5 (ZEHNERTASTATUR)}", $Sound_100],["^!d", $herunterfahren]]
GUISetAccelerators($Headline_AccelTable)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
SoundPlay("C://xxx.mp3")
SoundSetWaveVolume(100)


$ini = @ScriptDir & "/testini.ini"

$MinecraftSP = Inputbox("Pfad","Pfad von MinecraftSP")
Sleep(5000)
$Resident_Evil = InputBox("Pfad","Pfad von Resident Evil")
Sleep(5000)
$Anno_2070 = Inputbox("Pfad","Pfad von Anno 2070")
Sleep(5000)
$Anno_1404 = InputBox("Pfad","Pfad von Anno 1404 ")
Sleep(5000)
$LastCHAOS1 = Inputbox("Pfad","Pfad von Last Chaos")
Sleep(5000)
$lOCOO= InputBox("Pfad","Pfad von LOCO ")
Sleep(5000)
$Minecraft = Inputbox("Pfad","Pfad von Minecraft")
Sleep(5000)

IniWrite($ini, "Section","SP_Minecraft",$MinecraftSP)
IniWrite($ini, "section","Resident Evil",$Resident_Evil)
IniWrite($ini, "Section","Anno 2070",$Anno_2070)
IniWrite($ini, "section","Anno 1401",$Anno_1404)
IniWrite($ini, "Section","LastChaos",$LastCHAOS1)
IniWrite($ini, "section","LOCO",$lOCOO)
IniWrite($ini, "Section","Minecraft",$Minecraft)

MsgBox(0,"Pfad von SP Minecraft", $MinecraftSP)
MsgBox(0,"Pfad von Resident Evil",$Resident_Evil)
MsgBox(0,"Pfad von Anno 2070", $Anno_2070)
MsgBox(0,"Pfad von Anno 1404",$Anno_1404)
MsgBox(0,"Pfad von Last Chaos", $LastCHAOS1)
MsgBox(0,"Pfad von LOCO",$lOCOO)
MsgBox(0,"Pfad von Minecraft", $Minecraft)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $herunterfahren
			Shutdown(1)
		Case $restart
			Shutdown(2)
		Case $abmelden
			Shutdown(0)
		Case $Minecraf
			run($Minecraft)
		Case $Loc
			run($lOCOO)
		case $Lastchaos
			run($LastCHAOS1)

			Case $Anno_1

				run($Anno_2070)
			Case $Ann
				run($Anno_1404)
			Case $Residen
				run($Resident_Evil)
			Case $SP_Minecraft
				run($MinecraftSP)
			Case $Close
				Exit
			Case $Info
				MsgBox(0, "Info", "Version 1.0")
			Case $Sound_0
				SoundSetWaveVolume(100)
				sleep(100)
				SoundSetWaveVolume(80)
				sleep(100)
				SoundSetWaveVolume(60)
				sleep(100)
				SoundSetWaveVolume(40)
				sleep(100)
				SoundSetWaveVolume(20)
				sleep(100)
				SoundSetWaveVolume(0)
			Case $Sound_100
				SoundSetWaveVolume(0)
				sleep(100)
				SoundSetWaveVolume(20)
				sleep(100)
				SoundSetWaveVolume(40)
				sleep(100)
				SoundSetWaveVolume(60)
				sleep(100)
				SoundSetWaveVolume(80)
				sleep(100)
				SoundSetWaveVolume(100)
	EndSwitch
WEnd
Ich wollte jetzt eigentlich nur Fragen, wie man es macht, dass man auf einem PC den Pfad nur einmal eingeben muss und danach es nicht mehr machen muss :D
und ob ihr noch irgendwelche Verbesserungsvorschläge habt ^^

LG xDeadess
06/29/2012 21:39 KDeluxe#2
Du speicherst die Pfade ja breits in einer .ini ab. Du solltest lieber Eingabefelder verwenden und auf die Inputbox() Funktion verzichten. Beim Programmstart befüllst du dann einfach die Eingabefelder. Auf Sleeps solltest du weitgehend verzichten, diese sind bei hohen Wartezeiten nicht nur schlecht für das Script (da das ganze Script pausiert wird), sondern auch nervig für den Anweder.

Du kannst ja mal folgendes probieren:
Erstelle eine GUI, auf der Anfangs nur ein Button existiert. Bei einem Klick auf den Button forderst du den Benutzer auf eine .exe mittels FileOpenDialog() auszusuchen. Anschließend soll ein neuer Button erstellt werden (dynamisch). Optimal wäre es, wenn du das Icon der .exe in der GUI (im Button) anzeigen würdest. Alternativ kannst du darauf einfach verzichten oder den Benutzer dazu auffordern selber ein Bild auszuwählen.
Die Benutzereinstellungen kannst du dann wieder einfach in einer .ini speichern. Beim nächsten Programmstart werden die Daten ausgelesen und die Buttons wieder erstellt.
Das ganze ist einfacher als man es am Anfang vielleicht denkt.
06/29/2012 22:10 xDeadless#3
ok ty, werde morgen oder so es mal probieren :D

ok, ich habe schon mal angefagen ;D

Ich hab es "schon" geschafft, das wenn ich mit dem Button1 eine exe auswähle, ein zweiter Button erstellt wird.

Aber ich weiß grad net weiter, was ich machen muss damit er die Daten aus der *.ini ausließt ....
und wie ich das Icon von der exe bekomme ...:rtfm:
07/02/2012 14:27 xDeadless#4
I need help ...
07/02/2012 20:07 Lawliet#5
Du kannst mit IniRead die Ini wieder auslesen ;)

Mit FileExist kannst du checken, ob diese bereits erstellt wurde.
07/02/2012 20:07 lolkop#6
icons aus files auslesen, ist ohne tieferes verständnis über den aufbau von pe-files nicht möglich...

darum sollte es hier aber auch garnicht gehen. dich sollte zunächst einmal interessieren, wie ich in autoit richtig mit guis arbeite.

für den anfang sollte ein einfaches kleines test-gui genügen. damit unser script nich sofort nach dem erstellen beendet wird, fügen wir eine kleine endlosschleife hinzu und haben schonmal mehr als die hälfte geschaft:
Code:
GUICreate('Test', 300, 40, Default ,Default, 0x10CA0000)

While True
	Switch GUIGetMsg()
		Case -3
			ExitLoop
	EndSwitch
WEnd
jetzt noch ein input und einen button dazu, dem button die funktion geben per fileopendialog den pfad einer datei zu bestimmen, das ganze per guictrlsetdata in das input schreiben und wir sind schon fertig:
Code:
GUICreate('Test', 300, 40, Default ,Default, 0x10CA0000)
$input = GUICtrlCreateInput('', 10, 10, 250, 20)
$button = GUICtrlCreateButton('...', 265, 10, 30, 20)

While True
	Switch GUIGetMsg()
		Case -3
			ExitLoop
		Case $button
			GUICtrlSetData($input, FileOpenDialog('Suche deine Datei', @ScriptDir, 'Alle Dateien (*.*)'))
	EndSwitch
WEnd
man hätte natürlich auch den pfad für den späteren gebrauch in einer variable speichern können, jedoch denke ich das solltest du wirklich ohne weiteres selbst hinbekommen.

wichtig ist nur das du deinen main part immer in EINER endlosschleife abarbeitest.
07/02/2012 20:15 Lawliet#7
Du hast aber GuiSetState(@SW_Show), zwischen dem Code zur GUI und der Schleife, vergessen ;)
07/02/2012 21:00 lolkop#8
Quote:
Originally Posted by Lawliet! View Post
Du hast aber GuiSetState(@SW_Show), zwischen dem Code zur GUI und der Schleife, vergessen ;)
der style 0x10CA0000 beinhaltet:
  • 0x10000000 ($WS_VISIBLE)
  • 0x00C00000 ($WS_CAPTION)
  • 0x00080000 ($WS_SYSMENU)
  • 0x00020000 ($WS_MINIMIZEBOX)
womit das ganze von vornherein sichtbar ist, was die nutzung des befehls nutzlos machen würde.

Edit:
Das gui unsichtbar erstellen, und erst nach der erstellung sichtbar machen macht nur dann sinn, wenn die menge der controls so hoch ist, das die erstellung vom user wahrgenommen werden kann, bzw wenn das gui aus welchen gründen auch immer vorerst nich sichtbar sein sollte.

keiner der beiden punkte trifft hier zu, also ist es effizienter das ganze sofort sichtbar zu erstellen =)
07/05/2012 09:51 xDeadless#9
man oh man bin ich blöd...

So weit wie lolkop geschrieben hat, war ich auch schon.
Da habe ich auch schon.
Aber wenn ich das Programm dann neustarte muss ich immer und immer wieder den Pfad neu mit FileOpenDialog reinhauen. Ich habe schon mit IniWritte den Pfad in die ini geschrieben, aber das Programm ließt den Pfad net aus, sondern will den Pfad von neuen schreiben...
07/05/2012 10:50 Lawliet#10
If not iniread(...xyz) then
$MinecraftSP = Inputbox("Pfad","Pfad von MinecraftSP")
Sleep(5000)
$Resident_Evil = InputBox("Pfad","Pfad von Resident Evil")
Sleep(5000)
$Anno_2070 = Inputbox("Pfad","Pfad von Anno 2070")
Sleep(5000)
$Anno_1404 = InputBox("Pfad","Pfad von Anno 1404 ")
Sleep(5000)
$LastCHAOS1 = Inputbox("Pfad","Pfad von Last Chaos")
Sleep(5000)
$lOCOO= InputBox("Pfad","Pfad von LOCO ")
Sleep(5000)
$Minecraft = Inputbox("Pfad","Pfad von Minecraft")
Sleep(5000)

IniWrite($ini, "Section","SP_Minecraft",$MinecraftSP)
IniWrite($ini, "section","Resident Evil",$Resident_Evil)
IniWrite($ini, "Section","Anno 2070",$Anno_2070)
IniWrite($ini, "section","Anno 1401",$Anno_1404)
IniWrite($ini, "Section","LastChaos",$LastCHAOS1)
IniWrite($ini, "section","LOCO",$lOCOO)
IniWrite($ini, "Section","Minecraft",$Minecraft)

else

;Pfad auslesen und einsetzten

endif
07/05/2012 11:04 lolkop#11
ich denke dein problem liegt darinn, das @WorkingDir mit dem FileOpenDialog neu gesetzt wird. speicherst du entwas in "*.ini", so landet es in @WorkingDir&"*.ini".

willst du deine ini in @ScriptDir speichern, kannst du also entweder den vollen pfad der ini angeben, oder du setzt @WorkingDir = @ScriptDir

beispiel (@WorkingDir = @ScriptDir Methode):
Code:
GUICreate('Test', 300, 40, Default ,Default, 0x10CA0000)
$input = GUICtrlCreateInput(IniRead('save.ini', 'saves', 'path', ''), 10, 10, 250, 20)
$button = GUICtrlCreateButton('...', 265, 10, 30, 20)

While True
	Switch GUIGetMsg()
		Case -3
			ExitLoop
		Case $button
			GUICtrlSetData($input, FileOpenDialog('Suche deine Datei', @ScriptDir, 'Alle Dateien (*.*)'))
	EndSwitch
WEnd

FileChangeDir (@ScriptDir)
IniWrite('save.ini', 'saves', 'path', GUICtrlRead($input))
07/05/2012 11:53 xDeadless#12
danke
07/05/2012 11:59 Dr.Toni-old#13
naja da du neu bist reporte ich dich mal nicht ;)

Danke drücken nicht sagen :)
07/05/2012 13:17 xDeadless#14
ok, dann mache ich mal nur noch eine Sache und nicht beide ;)