Quote:
Originally Posted by »FlutterShy™
Das handle (die HWND [Hardware number oder sowas ] )
|
Handle (of a)
Wi
NDow → window handle
Nichts mit Hardware.
Quote:
Originally Posted by BOTCK
Und wenn ich jetzt in deinem bestimmten Fenster den Script laufen lassen will, was ändere ich dann bzw. wieso funktioniert das überhaupt ? "WinGetHandle" wurde doch von mir garnicht definiert?
(Und bringt es überhaupt was - wenn ich alle Funktionen so code, dass sie in einem bestimmten Fenster laufen - also MouseMove etc. kann ich dann an dem Pc normal arbeiten, oder darf ich auch dann die Maus nicht anfassen?)
|
WinGetHandle() ist eine Standardfunktion von AutoIt. Das Handle eines Fensters an eine Funktion zu übergeben macht unmögliches nicht möglich. PixelSearch() funktioniert ähnlich wie das menschliche Auge. Was das Script bzw. die Funktion nicht "sieht" kann schlicht und ergreifend nicht gefunden bzw. erfasst werden.
Fragst du dich jetzt, wofür dieser Parameter gut ist? Ganz einfach: Die Koordinaten erfolgen relativ zum jeweiligen Fenster und nicht über den Desktop. Du kannst das Fenster also frei bewegen ohne die Funktionalität deines Scripts zu beeinträchtigen.
Das setzt natürlich zwei Dinge voraus:
- Alle verwendeten Funktionen müssen mit den Fenster-Koordinaten arbeiten können. Ein normales MouseMove() oder MouseClick() wird hier nicht funktionieren.
- Der Arbeitsbereich (Fenster) MUSS sichtbar sein.
Das aktive ("[active]") Fenster kann logischerweise nicht im Hintergrund laufen, da sich diese zwei Zustände ausschließen.
Wie Croco™ schon geschrieben hat kannst du MouseMove() nicht im "Hintergrund" laufen lassen. Selbiges gilt für alle Mouse...() Funktionen.
Alternativ dazu kannst du allerdings ControlClick() (AutoIt Standardfunktion) oder PostMessage (AutoIt UDF von mir, findest du in diesem Forum) verwenden. Hier musst du allerdings beachten, dass dies nicht immer ohne weiteres möglich ist. Bei "modernen" Client basierenden Spielen funktionieren diese meist nur eingeschränkt oder gar nicht.
Um die Grundlegende Frage zu klären:
Ja, es ist bedingt möglich PixelSearch() im "Hintergrund" laufen zu lassen. Bedingt und Hintergrund in Anführungszeichen daher, da dass Fenster immer noch frei sichtbar sein muss. Sollten Aktionen mit der Maus ausgeführt werden, so musst du auf ControlClick() oder die PostMessage Funktion zurückgreifen. Bei Aktionen der Tastatur wäre es ControlSend() oder ebenfalls die PostMessage Funktion.
Hier ist es eigentlich nur eine Frage der Hardware, ich persönlich verwende drei Monitore, einen zu "opfern" tut nicht weh. Notebooks können häufig nur zwei Monitore ansteuern und sollte zudem ein zusätzlicher Monitor fehlen ist das ganze schon problematischer.
Je nach verbauter Hardware und Verwendungszweck wäre es auch möglich das Programm in einer virtuellen Maschine ausführen zu lassen. Diese kann selbst dann noch minimiert im Hintergrund laufen, wenn du MouseMove(), -Click() oder vergleichbares verwendest. Aber das hat nichts mehr mit AutoIt zu tun.