Autoit Spezielle Variable

02/06/2010 14:43 Synthesys#1
hihi :D

ich habe eine frage:

kann mir jmd sagen, wie ich in auto it eine variable erstelle, welche
ein wort als inhalt zugewiesen bekommt, wobei da wort zufällig auf einer internetseite generiert wird ??

ich habe mir gedacht, dass ich das wort markieren und kopieren lasse
und dann das "kopierte" der variable als wert zuweise .... wäre nett, wenn mit jmd helfen könnte :D
02/06/2010 18:54 Synthesys#2
naja da mir bisher keine geantwortet hat habe ich mir einiges überlegt:


ichh ba e mir gedacht, dass ich ja theoretisch einfach eine inputbox erstellen könnte und dann mit dem programm einfach kopieren und einfügen lassen kann ....

also mein ansatz sieht so aus:

Code:
#include <GUIConstantsEx.au3>
GUICreate("Bot", 335, 100)

GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)
$startbutton = GUICtrlCreateButton("Start", 190, 8, 60)

GUISetState(@SW_SHOW)

$start = 0
$H = "Hilfe"
$H2 = "H"

While $start=0
	$msg = GUIGetMsg()
	
	Select
		Case $msg = $startbutton
		$start=$start+1
		
		Case $msg = $GUI_EVENT_CLOSE
		GUIDelete()
		ExitLoop
	
	EndSelect
	
WEnd


$zehn = 0
MouseClick ("left", 375, 368) 


while $zehn<10

if $ele==$H	then
send ($H2)
sleep (100)
send ("{Enter}")
sleep (250)


Else
send ($H)
sleep (100)
send ("{Enter}")
sleep (250)	 
EndIf

EndIf
	
$zehn=$zehn+1

Wend
--> es öffnet sich ein fenster mit einem textfeld und dem Start-button

(mehr oder weniger aus dem touturial übernommen... )

aber was mich nervt ist, dass

1. sich die Inputbox (nicht in diesem beispiel aber allg.) schliest nachdem etwas eingegeben wurde
2. dass ich auch wenn ich etwas eingebe die variable ele nicht besetzt wird ...

ich dachte eig. dass die Variable den wert übergeben bekommt, der in dem textfeld steht, sobald man start drückt ... aber dies ist nicht der fall -.-



vlt kennt ja jmd von euch eine bessere
(elegantere) Lösung
02/06/2010 19:12 kknb#3
verstehe ehrlich gesagt garnicht was du möchtest, drück dich mal klipp und klatr in einem satz aus :)
02/06/2010 19:48 Synthesys#4
:D hmm schwierig zu formulieren ....

aber ich habe das problem jetzt mehr oder weniger umgangen ....

was jetzt dazu gekommen ist:

Programm startet

--> es öffnet sich ein fenster mit einem Textfeld

Code:
#include <GUIConstantsEx.au3>
GUICreate("PSE-Bot", 335, 100)

GUICtrlCreateLabel("Element", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)

GUISetState(@SW_SHOW)
mein problem ist jetzt:

ich will, dass die variable $ele durch den inhalt des textfeldes deklariert wird


--> ich gebe was in das feld ein und drücke enter --> varaible $ele hat jetzt meine eingabe als wert übergeben bekommen.


das ganz ewil ich dann auch noch in eine while-schleife packen aber das kommt erst später ....

jetzt ist primär mein problem, um es in einem satz zu formulieren ;)

Die übergabe des Textinhaltes eines zuvor generierten textfelds an eine variable
[und das ganze in einer schleife :D]
02/06/2010 19:59 kknb#5
du willst nichts deklarieren. du willst einfach den inhalt des inputs auslesen nehm ich an?

$ergebnis=guictrlread($ele)

Code:
#include <GUIConstantsEx.au3>
GUICreate("Bot", 335, 100)

GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)
$startbutton = GUICtrlCreateButton("Start", 190, 8, 60)

GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $startbutton
			MsgBox(0,"",GUICtrlRead($ele))
	EndSwitch
WEnd
02/06/2010 20:32 Synthesys#6
hmm ok :D
dann eben input auslesen :D

also so was wie in java der bufferd reader machen würde :D

danke für die antwort ich probiers gleich mal aus :)



aber:

geht es auch, ohne den start-button ?
(also z.B. mit enter bestätigen ?)
[habs noch nit ausprobiert aber ich denke mal so was in der art: ]

Code:
#include <GUIConstantsEx.au3>
GUICreate("Bot", 335, 100)

GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)

GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case [COLOR="Red"]{Enter}[/COLOR] ; funktioniert so wahrscheinlich nicht ... aber da muss ich erst mal ein bischen rumprobieren :D 
			MsgBox(0,"",GUICtrlRead($ele))
	EndSwitch
WEnd

und 2.

was wenn ich die variable $ele öfters neu beschreiben will
also so, dass das fenster geöffnet bleibt
--> ich gebe einen text ein; lese den inhalt des inputs aus, nachdem ich enter [start] gedrück habe --> es passiert je nach text etwas (des ist eig kein problem..) --> ich gebe einen neuen text in das noch geöffnete fenster ein und belege die variable neu ....

ich hoffe das ist so verständlich xD

vielen dank schon mal :D
02/07/2010 00:09 kknb#7
klar das ist kein problem. jedesmal wenn du enter drückst wird der inhalt des inputfeldes neu eingelesen.

Code:
#include <GUIConstantsEx.au3>
#include <Misc.au3>

GUICreate("Bot", 335, 100)
GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)
GUISetState(@SW_SHOW)
$dll = DllOpen("user32.dll")



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	if _IsPressed("0D", $dll) then
		MsgBox(0,"",GUICtrlRead($ele))
	EndIf
WEnd
02/07/2010 10:16 Synthesys#8
hey vielen dank ich denke so sollte ich es jetzt ganz gut realisieren können :D
02/07/2010 10:26 Synthesys#9
ok ich habe das jetzt mal ausprobiert... .

sobald ich jetzt etwas in das textfeld eingebe öffnet sich ein neues fenster und meine eingabe wird wieder ausgegeben ...

was ich aber gerne hätte wäre, dass je nach eingabe dann etwas bestimmtes passiert.

Aber so, dass jedes mal wenn ich etwas eingebe genau einmal die aktion ausgeführt wird, bis ich wieder etwas eingeben ...


Code:
#include <GUIConstantsEx.au3>
#include <Misc.au3>

GUICreate("Bot", 335, 100)
GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)
GUISetState(@SW_SHOW)
$dll = DllOpen("user32.dll")



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	if _IsPressed("0D", $dll) then
		MsgBox(0,"",GUICtrlRead($ele))  ;das text feld soll auch ausgewertet werden
	EndIf
WEnd


$H = "Test" 

While True
	
	If $ele==$H Then 

	    MouseClick ("left", 220, 220) 
            sleep (100)
	    MouseClick ("left", 220, 220) 
		
	EndIf
	
WEnd
das ist jetzt die etwas gekürzte fassung,... ich habe in wirklichkeit ca. 15 verschiedene aktionen, die gemacht werden sollen aber $H soll hier zum testen verwendet werden....

also wenn ich ich das feld test eingebe soll 2 mal mit der maus auf eine bestimmte stelle geklickt werden

wenn ich nocheinmal test eingeben soll das gleiche wieder passieren

aber immer nur dann wenn ich etwas neues eingegeben habe und dann wieder enter gedrückt habe :D


ich weiss ich bin nervig :D aber ich bekomme es leider nicht hin .. habe erst vor 3 tagen mit autoit angefangen :D

-- mir fehlt der doch recht hilfreiche goto befehl aus bat ^^ --
02/07/2010 13:58 kknb#10
Code:
#include <GUIConstantsEx.au3>
#include <Misc.au3>

GUICreate("Bot", 335, 100)
GUICtrlCreateLabel("ele", 8, 10)
$ele = GUICtrlCreateInput("", 60, 8, 120)
GUISetState(@SW_SHOW)
$dll = DllOpen("user32.dll")

gui()

func gui()
local  $H = "Test"
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	if _IsPressed("0D", $dll) then
		if guictrlread($ele) == $h then
			return machwas()
		elseif guictrlread($ele) == "anderes wort" then
			return machwas1()
		EndIf
	EndIf
WEnd
endfunc

func machwas()
	MouseClick ("left", 220, 220)
	sleep (100)
	MouseClick ("left", 220, 220)
	return gui()
EndFunc

func machwas1()
;irgendwas anderes
EndFunc
02/07/2010 19:36 Synthesys#11
hey danke jetzt funktioniert alles so wie ich es mir vorgestellt habe :D

den func befehl kannte ich bisher noch nicht ^^ aber er erinnert mich etwas an die unterprogramme in Java :)

hmm so wie es aussieht hat autoit eher den "aufbau" (ich nenn das jetzt einfach mal so) einer Programmiersprache als einer skriptsprache ^^

also danke nochmal :D