ControlSend an 2 Fenster mit gleichem Namen

07/27/2011 00:21 Karamelleis#1
Hiho ePvPs,

Ich hab da eine Frage. Es ist doch sicherlich möglich an 2 verschiedene Fenster, nehmen wir mal FlyFF (also 2 Fenster mit namen FlyFF), via der Prozess ID an ein bestimmtes Fenster einen Befehl zu senden. Ich lese die Prozess ID wie folgt aus :

PHP Code:
    $window1buffer WinWaitActive ("FlyFF")
        
WinGetHandle($window1buffer)
        
$window1 WinGetProcess($window1buffer
So sieht mein Code aus. Er liest auch eine Prozess ID aus die ich mir zur Sicherheit immer dannach in einer Msgbox ausgeben lasse. Allerdings wenn ich dann einen Befehl an dieses Fenster "FlyFF" schicke und bei ControlID die Prozess ID eintrage sendet er überhaupt keinen Key mehr. So sieht mein Befehl zum senden aus :

PHP Code:
ControlSend ("FlyFF","","Prozess ID","Irgendein Key"
weiß jemand wo mein Fehler liegt oder kennt jemand die Lösung?

greetz
07/27/2011 00:32 buFFy!#2
benenn doch die fenster einfach um. als opt den wintitlematchmode so einstellen das der fenstername 1:1 stimmen muss und dann einfach 2x setwindowtext mit FlyFF als 1stTitle aufrufen.

ungetestet
Code:
Func RenameWindows($szWindowText, $iCount)
	For $i = 1 To $iCount
		WinSetTitle($szWindowText, "", $szWindowText & $i)
	Next
	Return
EndFunc
aufruf
Code:
RenameWindows("FlyFF", 2)
$iCount ist logischerweise die anzahl der fenster die du umbenennen willst.
07/27/2011 01:12 KDeluxe#3
Da würde ich doch lieber die Vorzüge von AutoIt ausnutzen.
PHP Code:
$WinList WinList("FlyFF")
For 
$i 1 To $WinList[0][0]
    
ControlSend($WinList[$i][1], """""W")
Next 
07/27/2011 01:36 Karamelleis#4
Hast du also die Fenster in einem Feld geordnet richtig? Somit könnte ich beliebig viele Fenster haben solange ich [1][1], [2][2], usw. bei Controlsend editiere richtig?

und das was ich mit der Prozess ID gemacht habe ist komplett überflüssig oder? :s
Hab nicht gedacht, dass das so einfach geht.

Naja werds mal ausprobieren danke!

greetz
07/27/2011 10:33 KDeluxe#5
Quote:
The array returned is two-dimensional and is made up as follows:
$array[0][0] = Number of windows returned
$array[1][0] = 1st window title
$array[1][1] = 1st window handle (HWND)
$array[2][0] = 2nd window title
$array[2][1] = 2nd window handle (HWND)
...
$array[n][0] = nth window title
$array[n][1] = nth window handle (HWND)
Lese dir das doch durch, [2][2] wird dir nicht mehr als einen Fehler bringen. Die For Schleife habe ich nicht umsonst gewählt. Für Spiele ist das mit der For Schleife je nach Anwendung aber schlecht.
07/27/2011 10:44 buFFy!#6
fragt sich nur ob er tatsächlich alle fenster umbennen will, oder nur eine gewisse anzahl.
btw jedes mal winlist zu callen ist performancelastig.

einmalig umbenennen ist definitiv die bessere lösung ^^
07/27/2011 10:56 KDeluxe#7
Es ist ja nur ein Beispiel, es würde aber auch nur mit einem Aufruf gehen. Dabei gibt es aber dann ein Problem, nach dem Schließen des Fensters ist das Handle ungültig und somit die Funktionsaufrufe unnötig. Selbes Problem ergibt sich aber auch beim umbenennen. Dieses Problem lässt sich aber sowieso ganz einfach lösen.
07/27/2011 11:31 Karamelleis#8
Ab welchem Zeitpunkt wird sich Winlist performancelastig aus? Ich wollte eigentlich nur einen simplen Bot schreiben der F1,F2, ... (was man ausgewählt hat) an die jeweiligen Fenster schickt. Wird der PC langsamer wenn man den Bot ca. 1 Stunde laufen lässt (gehen wir von einem Standart PC aus) ?

Und mir ist noch nicht klar was du mit dem Handle meinst muss ich das in die Schleife einbauen? Ich bin da noch recht unerfahren in dem Gebiet darum bitte ich um Hilfe. :p

Quote:
WinGetHandle("FlyFF") wäre ja dann unlogisch bzw. falsch weil beide Fenster den gleichen Namen haben

WinGetHandle($Winlist[i][1]) würde dann doch für das erste Fenster funktionieren richtig?
07/27/2011 12:11 KDeluxe#9
Quote:
Originally Posted by Karamelleis View Post
WinGetHandle($Winlist[i][1]) würde dann doch für das erste Fenster funktionieren richtig?
Befolge doch einfach mal meinen Rat und lese dir die Funktion durch. $WinList[$i][1] beinhaltet das Handle des n-ten Fensters. Das Handle eines Fenster mit Hilfe des bereits gegeben Handles zu bekommen macht keinen Sinn.

Bei einem simplen Bot kannst du es z. B. so anstellen:
PHP Code:
HotKeySet("1""_Start")
HotKeySet("2""_Pause")
HotKeySet("3""_Exit")

Global 
$Paused False

Func _Start
()
    
$WinList WinList("FlyFF")
    If 
$WinList[0][0] == 0 Then
        MsgBox
(48"Fehler""FlyFF wurde nicht gefunden!")
    Else
        While 
Sleep(10)
            For 
$n 1 To $WinList[0][0]
                
ControlSend($WinList[$n][1], """""{F1}")
            
Next
        WEnd
    
EndIf
EndFunc

Func _Pause
()
    
$Paused Not $Paused
    
While $Paused
        Sleep
(100)
    
WEnd
EndFunc

Func _Exit
()
    Exit
EndFunc

While Sleep(100)
WEnd 
07/27/2011 12:34 Karamelleis#10
Danke jetzt verstehe ich es!

Kann geclost werden