GUI schließt sich automatisch...

04/04/2010 13:24 mipez#1
PHP Code:
WinWait("Fenster")
$get1 GUICtrlRead($resolution)
$pixel1 PixelSearch(720,418,721,419,0x3C4757)
If 
$get1 "1440x900" Then
    
Do 
        
$pixel1
    Until $pixel1 
1
    MsgBox
(0,"Found","Found")
EndIf 
Es muss an der If-Abfrage liegen, kann nur nich sagen woran...
Gedanke is, dass es nach einem bestimmten Wert in einer Combobox (den Teil hab ich schon) ein bestimmtes Pixel sucht (je nach Auflösung eben).

Problem is, dass sich die GUI schließt, sobald das Fenster in dem es suchen soll auftaucht.
04/04/2010 13:52 .nAno#2
kannste bitte den gesamten Code zeigen?
So kann man einige Fehler ausschließen.

Was ich mich nur Frage ist, was das $pixell in der Do/Until Schleife zusuchen hat, ohne einen Befehl der es verändert :P
04/04/2010 13:56 mipez#3
Quote:
Originally Posted by .nAno View Post
kannste bitte den gesamten Code zeigen?
So kann man einige Fehler ausschließen.

Was ich mich nur Frage ist, was das $pixell in der Do/Until Schleife zusuchen hat, ohne einen Befehl der es verändert :P
Ich hab schon einiges probiert, immer mit dem selben Ergebnis (passiert bei mir irgendwie immer bei Do Until)

Aber hier das, was schon fertig is:
04/04/2010 14:14 .nAno#4
kommt da ne Fehlermeldung, oder wie beendet er sich?

Die WhileSchleife wird nämlich nach Aufrufen der Funktion wieder aufgenommen und es gibt weder Exit noch ExitLoop --> nichts was das Programm geplant beendet und vllt. ausversehn aufgerufen wurde.
04/04/2010 14:17 Pwneres#5
.nAno hats dir doch schon gesagt
normalerweise solltest du auch einen compiler fehler kriegen
Code:
$pixel1 = PixelSearch(720,418,721,419,0x3C4757)
If $get1 = "1440x900" Then
    Do 
        $pixel1
    Until $pixel1 = 1
    MsgBox(0,"Found","Found")
EndIf
^this :facepalm:
wenn $pixel1 nicht aktualisiert wird, dann wird die schleife niemals beendet
Code:
$pixel1 = PixelSearch(720,418,721,419,0x3C4757)
If $get1 = "1440x900" Then
    Do 
        $pixel1 = PixelSearch(720,418,721,419,0x3C4757)
    Until $pixel1 = 1
    MsgBox(0,"Found","Found")
EndIf
04/04/2010 14:18 mipez#6
Quote:
Originally Posted by .nAno View Post
kommt da ne Fehlermeldung, oder wie beendet er sich?

Die WhileSchleife wird nämlich nach Aufrufen der Funktion wieder aufgenommen und es gibt weder Exit noch ExitLoop --> nichts was das Programm geplant beendet und vllt. ausversehn aufgerufen wurde.
Es geht einfach aus, ohne einen Mux... Aber eben nur nachdem das Fenster "S4 Client" aufgetaucht ist -> also muss es an der Do-Until-Schleife liegen...


EDIT:
Ich hab das mit
Code:
$pixel1 = PixelSearch(720,418,721,419,0x3C4757)
If $get1 = "1440x900" Then
    Do 
        $pixel1 = PixelSearch(720,418,721,419,0x3C4757)
    Until $pixel1 = 1
    MsgBox(0,"Found","Found")
EndIf
schon probiert.... gleiches Ergebnis .___.
04/04/2010 14:23 .nAno#7
Setz mal Debugger in die Do/Until Schleife und schau wieoft sie auftaucht, ob überhaupt oder immer (da sich der Wert von $pixel wie schon gesagt nicht ändern kann)

EDIT: außerdem müsstest du schon so nen Fehler haben, da PixelSearch nen Array returned, wenn dein Prog. überhaupt mal funktioniert wirst du da auch ein Problem bekommen, da du die Variable überhaupt nicht wie einen Array behandelst...
04/04/2010 14:29 mipez#8
Debugger crasht Oo
Was gäbs denn noch für Möglichkeiten um PixelSearch solange zu wiederholen bis es 1 is?

EDIT: Es kommt ja, wenn ich normal starte, keine Fehlermeldung >_<
04/04/2010 15:08 .nAno#9
die Funktion retruned nie 1, sprich es kann nie 1 sein o0
04/04/2010 17:14 mipez#10
Quote:
Originally Posted by .nAno View Post
die Funktion retruned nie 1, sprich es kann nie 1 sein o0
Ja, x,y returned die... bloß damit kann ich nix anfangen -> vllt True/False benutzen?
04/04/2010 18:00 Shadow992#11
Quote:
Originally Posted by mipez View Post
Ja, x,y returned die... bloß damit kann ich nix anfangen -> vllt True/False benutzen?
Probiers mal mit PixelGetColor(...) bzw PixelChecksum , könnte vielleicht das erreichen was du willst .
Wenn du einfach nur überprüfen willst ob die Pixel in einem Bereich gefunden wurden , kannst du das so machen :

PHP Code:
do
$pixel=PixelSearch(720,418,721,419,0x3C4757)
until Isarray($pixel)<>
Wobei man bei dir nicht umbedingt PixelSearch braucht , da du nur einen einzigen Pixel überprüfen lässt . PixelGetColor wäre wohl besser :


PHP Code:
do
sleep(100) ;reduziert die CPU Auslastung 
until PixelGetColor 
721 419)=0x3C4757 
Falls du noch genaueres zu dem Pixel gezeugse haben willst :
[Only registered and activated users can see links. Click Here To Register...]
04/04/2010 18:13 mipez#12
Quote:
Originally Posted by Shadow992 View Post
Probiers mal mit PixelGetColor(...) bzw PixelChecksum , könnte vielleicht das erreichen was du willst .
Wenn du einfach nur überprüfen willst ob die Pixel in einem Bereich gefunden wurden , kannst du das so machen :

PHP Code:
do
$pixel=PixelSearch(720,418,721,419,0x3C4757)
until Isarray($pixel)<>
Wobei man bei dir nicht umbedingt PixelSearch braucht , da du nur einen einzigen Pixel überprüfen lässt . PixelGetColor wäre wohl besser :


PHP Code:
do
sleep(100) ;reduziert die CPU Auslastung 
until PixelGetColor 
721 419)=0x3C4757 
Falls du noch genaueres zu dem Pixel gezeugse haben willst :
[Only registered and activated users can see links. Click Here To Register...]
Letzteres hat mich schonmal soweit gebracht, dass es sucht, und nicht schließt. Jetzt findets nur nix Oo
Vllt ne Varianz von 5 oder so?

EDIT: Wenn ich es so mache:
PHP Code:
$get1 GUICtrlRead($resolution)
If 
$get1 "1440x900" Then
    
Do
        
$pixel=PixelSearch(720,418,721,419,0x3C4757)
    
Until Isarray($pixel)<>1  
If Isarray($pixel)<>1 Then
MsgBox
(0,"Found","Found")
ElseIf 
Isarray($pixel)<>0 Then
MsgBox
(0,"Couldn't find""Couldn't find")
EndIf
EndIf 
Dann findets das Pixel sofort wenn der Prozess startet -.-
04/04/2010 18:21 Shadow992#13
Quote:
Originally Posted by mipez View Post
Letzteres hat mich schonmal soweit gebracht, dass es sucht, und nicht schließt. Jetzt findets nur nix Oo
Vllt ne Varianz von 5 oder so?

EDIT: Wenn ich es so mache:
PHP Code:
$get1 GUICtrlRead($resolution)
If 
$get1 "1440x900" Then
    
Do
        
$pixel=PixelSearch(720,418,721,419,0x3C4757)
    
Until Isarray($pixel)<>1  
If Isarray($pixel)<>1 Then
MsgBox
(0,"Found","Found")
ElseIf 
Isarray($pixel)<>0 Then
MsgBox
(0,"Couldn't find""Couldn't find")
EndIf
EndIf 
Dann findets das Pixel sofort wenn der Prozess startet -.-
Bei dir findet er das Pixel eben nicht , wenn der Prozess startet .
Dir ist da nämlixh ein Fehler reingerutsch , so müsste es sein :

PHP Code:
$get1 GUICtrlRead($resolution)
If 
$get1 "1440x900" Then
    
Do
        
$pixel=PixelSearch(720,418,721,419,0x3C4757)
    
Until Isarray($pixel
If 
Isarray($pixelThen
MsgBox
(0,"Found","Found")
ElseIf 
Isarray($pixel)=0 Then
MsgBox
(0,"Couldn't find""Couldn't find")
EndIf
EndIf 
04/04/2010 18:25 mipez#14
Jetzt findets wieder nichts... hab auch nochmal die Farbe überprüft...
04/04/2010 18:26 Shadow992#15
Quote:
Originally Posted by mipez View Post
Jetzt findets wieder nichts... hab auch nochmal die Farbe überprüft...
Vielleicht solltest du die Varianz bisschen höher stellen ?
Villeicht so auf 3 .

Edit : Oder es liegt einfach nur daran , dass er die Farbe theoretisch garnicht finden kann ?
(Ich weiß nicht so genau wie PixelSeach arbeitet) . Soviel wie ich mich erinnern kann , sucht PixelSearch immer das Gebiet zwischen den angegeben Koordinaten ab und welcher Pixel liegt zwischen 418 und 419 ? Etwa 418,5 ? Mach das eine mal eins hoch bzw eins runter (das selbe auch bei Y Koordinate) .