Problem mit der Funktion

12/03/2010 07:27 freehuntx#1
Hi leute ich habe mich aus lust und laune vor ein script zu machen um mehrere dlls zum injecten zu verwalten..

müsst ihr nicht verstehen :D

Jedenfalls check ich einfach nicht wie ich das jetz machen soll ...

Ich komm vom einen Fehler in den anderen das gibts echt nich haha

hier der teil:

Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $Button5
			_start()

	EndSwitch
WEnd


Func _start(ByRef $var1, $var)


$var1 = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")

If FileExists(@ScriptDir & "\Path.ini") Then 
	run($var1)
Else

$var = FileOpenDialog("C:\Program Files\", "Executables (*.exe)")
IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $var)
run($var)
EndIf
EndFunc

Ich will einfach dass in der funktion:

1. geschaut wird ob die ini it dem pfad des zu startenden oprogramms existiert.
2. wenn nicht soll sie eben angelegt werden
3. wenn sie existiert soll das programm eben gestartet werden.

aber ich hab grad einfach nicht den kopf ich komm grad nich weiter xD
12/03/2010 13:53 PenGuin :O#2
Wozu ByRef? o.O

So sollte es gehn:

Code:
Func _Start()
	Local $Var1, $Var
	If FileExists(@ScriptDir & "\Path.ini") Then
		$Var1 = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
		Run($Var1)
	Else
		$Var = FileOpenDialog("C:\Program Files\", "Executables (*.exe)")
		IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $Var)
		Run($Var)
	EndIf
EndFunc   ;==>_Start
12/03/2010 16:06 Al Kappaccino#3
Quote:
Originally Posted by pinguin94 View Post
Wozu ByRef? o.O

So sollte es gehn:

Code:
Func _Start()
	Local $Var1, $Var
	If FileExists(@ScriptDir & "\Path.ini") Then
		$Var1 = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
		Run($Var1)
	Else
		$Var = FileOpenDialog("C:\Program Files\", "Executables (*.exe)")
		IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $Var)
		Run($Var)
	EndIf
EndFunc   ;==>_Start
Nix gelernt? :rolleyes:
Er will eine Funktion erstellen, an die er Paramter übergeben kann.

Dumm nur wenn bei 2 NICHT optionalen Parametern die Funktion mit "Nix" aufruft ...
12/03/2010 16:31 PenGuin :O#4
Ja aber er benutzt doch die Variablen gar nicht o.O
Er deklariert sie doch erneut in der Funktion durch einen Aufruf. Also $Var1 und $Var, deshalb dachte ich, er hatte kein Plan^^

Denk nicht, ich könnte das nicht.. -.- Ich hab seine Frage einfach nicht verstanden.

Wenn er das mit Parameter machen will:

Code:
Func _Start($IniPath)
	Local $Var1, $Var
	If FileExists($IniPath) Then
		$Var1 = IniRead($IniPath, "path", "key", "NotFound")
		Run($Var1)
	Else
		$Var = FileOpenDialog("C:\Program Files\", "Executables (*.exe)")
		IniWrite($IniPath, "Path", "key", $Var)
		Run($Var)
	EndIf
EndFunc   ;==>_Start
so wäre der Inipfad variabel.
12/03/2010 17:02 ZeraPain#5
was wollt ihr denn mit run bezwecken?
12/03/2010 18:12 PenGuin :O#6
Frag den TE.
12/03/2010 19:11 ZeraPain#7
total sinnlos var und var1 lokal zu machen, dann bewirkt die funktion ja nichts mehr.
wennschon vorher global setzen oder mit return werte zurückliefern.

entweder so:

Code:
Global $value

_start($value)

Func _start(ByRef $var)
	If FileExists(@ScriptDir & "\Path.ini") Then
		$var = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
	Else
		$var = FileOpenDialog("Select exe", @ProgramFilesDir, "Executables (*.exe)")
		If $var <> "" Then IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $var)
	EndIf
EndFunc

MsgBox(0,0,$value)
oder so:

Code:
Global $value

$value = _start()

Func _start()
	If FileExists(@ScriptDir & "\Path.ini") Then
		$var = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
	Else
		$var = FileOpenDialog("Select exe", @ProgramFilesDir, "Executables (*.exe)")
		If $var <> "" Then IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $var)
	EndIf
	Return $var
EndFunc

MsgBox(0,0,$value)
oder so:

Code:
Global $value

_start()

Func _start()
	If FileExists(@ScriptDir & "\Path.ini") Then
		$value = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
	Else
		$value = FileOpenDialog("Select exe", @ProgramFilesDir, "Executables (*.exe)")
		If $value <> "" Then IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $value)
	EndIf
EndFunc

MsgBox(0,0,$value)
12/03/2010 19:35 PenGuin :O#8
Jetzt begreif ich, was er wollte...
12/03/2010 21:11 MrSm!th#9
Quote:
Originally Posted by JakeFrost77 View Post
Nix gelernt? :rolleyes:
Er will eine Funktion erstellen, an die er Paramter übergeben kann.

Dumm nur wenn bei 2 NICHT optionalen Parametern die Funktion mit "Nix" aufruft ...
Nein will er nicht!
Er weist den Parametern in der Funktion nämlich den Wert zu, d.h. was er will sind lokale Variablen.

Quote:
total sinnlos var und var1 lokal zu machen, dann bewirkt die funktion ja nichts mehr.
wennschon vorher global setzen oder mit return werte zurückliefern.
Auch du hast den Code wohl nicht verstanden.
Natürlich bewirkt die Funktion was, sie führt das Programm aus, das an dem Pfad ist, der in der Ini steht.
Was soll sie denn auch zurückliefern? Sie liest selbst den Pfad aus und führt selbst aus.
Weder Rückgabewert noch Parameter sind notwendig, pinguin hat es absolut richtig geschrieben.

Falls nicht, hat der TE einfach einen total bescheuerten Code geposted, der etwas völlig anderes macht, als er will.
12/03/2010 21:38 ZeraPain#10
ach das war also der sinn von run, habe darauf garnicht geachtet sondern mich auf die ini beschänkt ;-) dann sorry
12/03/2010 21:57 PenGuin :O#11
Ich weiß immernoch nicht, was genau der TE nun möchte, ich habe eigentlich seine Funktion so umgeschrieben, dass er keine Parameter mehr braucht und sie ein wenig gekürzt. Mehr konnte ich nicht aus dem Startpost rauslesen.
12/04/2010 00:28 freehuntx#12
MrSm!th hat schon recht...

Ich danke euch für eure hilfe...



So klappts

Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $Button5
			_start()

	EndSwitch
WEnd


Func _start()
	If FileExists(@ScriptDir & "\Path.ini") Then
		$value = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
	run($value)
	Else
		$value = FileOpenDialog("Select exe", @ProgramFilesDir, "Executables (*.exe)")
		If $value <> "" Then IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $value)
		run($value)
	EndIf
EndFunc
War wohl einfach zu müde haha
12/04/2010 12:16 PenGuin :O#13
Quote:
Originally Posted by freehuntx View Post
MrSm!th hat schon recht...

Ich danke euch für eure hilfe...



So klappts

Code:
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
			
		Case $Button5
			_start()

	EndSwitch
WEnd


Func _start()
	If FileExists(@ScriptDir & "\Path.ini") Then
		$value = IniRead(@ScriptDir & "\Path.ini", "path", "key", "NotFound")
	run($value)
	Else
		$value = FileOpenDialog("Select exe", @ProgramFilesDir, "Executables (*.exe)")
		If $value <> "" Then IniWrite(@ScriptDir & "\Path.ini", "Path", "key", $value)
		run($value)
	EndIf
EndFunc
War wohl einfach zu müde haha
Also lag ich ja doch von vornerein richtig mit meiner Funktion.
Problem solved, gut :)