ControlClick ohne Fokus

07/29/2015 19:03 Moneypulation#1
Hey,

gibt es einen Weg, ControlClick für ein Fenster außerhalb des Bildschirms zu benutzen, ohne dass ich den Fokus von meinem aktuellen Fenster verliere? Ich möchte es mehrmals pro Sekunde benutzen, und das Verlieren des Fokus vom Fenster, das ich gerade im Vordergrund hab, stört sehr.

Ich konnte in Google nur diese Lösung finden, jedoch flackert es da etwas und verliert auch für wenige ms den Fokus, was ebenfalls ziemlich stört.

PHP Code:
$activeWindow WinGetHandle("")
_PostMessage_Click()
WinActivate($activeWindow
PostMessage hab ich auch versucht, jedoch mit selbem Ergebnis
07/29/2015 19:23 mlukac89#2
try this

Code:
#RequireAdmin

$win = '' ; name of a window

If WinExists($win) Then
    WinActivate($win) ; activates window if exists or use WinWaitActive()
Else
    MsgBox(48, "Error", "Window not founded")
EndIf

While 1
    Sleep(100)

    ControlSend($win, "", "", "{3}") ; sending number 3 to window
    Sleep(1000) ; pause

WEnd
07/29/2015 19:25 Daifoku#3
Code:
#RequireAdmin
#include "PostMessage.au3"
#include <WinAPI.au3>

Dim $hwnd = WinGetHandle("BlueStacks App Player")


While true
   _PostMessage_Click($hWnd,910 , 734, "left")
   Sleep(5000)
WEnd
Wenn das nicht geht, dann kannst du keine background-clicks mit Autoit machen. Das Programm wertet dann die Flags von postmessage(USER32.dll) aus. Du müsstest dir einen eigenen Kernel/Keyboard Driver schreiben oder die Keyboard Routine vom Prozess hooken und umschreiben.
07/29/2015 19:30 Moneypulation#4
Quote:
Originally Posted by mlukac89 View Post
try this

Code:
#RequireAdmin

$win = '' ; name of a window

If WinExists($win) Then
    WinActivate($win) ; activates window if exists or use WinWaitActive()
Else
    MsgBox(48, "Error", "Window not founded")
EndIf

While 1
    Sleep(100)

    ControlSend($win, "", "", "{3}") ; sending number 3 to window
    Sleep(1000) ; pause

WEnd
Thanks but I don't need ControlSend and ControlClick, as I said, makes me lose the focus from the window I'm currently on
07/29/2015 20:19 alpines#5
Was genau willst du den erreichen? Vielleicht kann man den ControlClick ja anders bewerkstelligen und ganz darauf verzichten.
07/29/2015 21:01 Moneypulation#6
Quote:
Originally Posted by alpines View Post
Was genau willst du den erreichen? Vielleicht kann man den ControlClick ja anders bewerkstelligen und ganz darauf verzichten.
Ich will meinen Pixelbot background machen. Ich habe schon einen Weg gefunden, wie ich Screenshots vom Fenster kriege, ohne dass man es sehen muss, jedoch kann ich eben nicht ein Klick an das Fenster senden, ohne dass ich den Fokus verliere. Und mein Pixelbot klickt manchmal 3-4 mal pro Sekunde, was dann ziemlich stört
07/29/2015 21:06 Daifoku#7
Quote:
Originally Posted by Moneypulation View Post
Ich will meinen Pixelbot background machen. Ich habe schon einen Weg gefunden, wie ich Screenshots vom Fenster kriege, ohne dass man es sehen muss, jedoch kann ich eben nicht ein Klick an das Fenster senden, ohne dass ich den Fokus verliere. Und mein Pixelbot klickt manchmal 3-4 mal pro Sekunde, was dann ziemlich stört
Lösung habe ich doch bereits hier rein geschrieben ? Schau mal weiter oben meinen Beitrag an ~
07/29/2015 21:40 Moneypulation#8
Quote:
Originally Posted by Daifoku View Post
Code:
#RequireAdmin
#include "PostMessage.au3"
#include <WinAPI.au3>

Dim $hwnd = WinGetHandle("BlueStacks App Player")


While true
   _PostMessage_Click($hWnd,910 , 734, "left")
   Sleep(5000)
WEnd
Wenn das nicht geht, dann kannst du keine background-clicks mit Autoit machen. Das Programm wertet dann die Flags von postmessage(USER32.dll) aus. Du müsstest dir einen eigenen Kernel/Keyboard Driver schreiben oder die Keyboard Routine vom Prozess hooken und umschreiben.
Wie gesagt, hatte ich PostMessage schon ausprobiert. Wie ich einen Kernel/Keyboard Driver schreibe oder die Keyboard Routine vom Prozess hooken und umschreiben kann, weiß ich leider nicht
07/29/2015 21:56 alpines#9
Quote:
Originally Posted by Moneypulation View Post
Wie gesagt, hatte ich PostMessage schon ausprobiert. Wie ich einen Kernel/Keyboard Driver schreibe oder die Keyboard Routine vom Prozess hooken und umschreiben kann, weiß ich leider nicht
Programme haben in der Treiberebene (Ring0) nichts verloren und sowas wirst du mit AutoIt auch nicht hinkriegen.

[Only registered and activated users can see links. Click Here To Register...] könnte da helfen aber ich glaube nicht das das die Lösung zu deinem Problem ist. Die wohl eleganteste Variante wäre wohl einen PacketBot zu basteln aber das ist nicht ganz so einfach.
07/29/2015 22:23 Daifoku#10
Quote:
Originally Posted by Moneypulation View Post
Wie gesagt, hatte ich PostMessage schon ausprobiert. Wie ich einen Kernel/Keyboard Driver schreibe oder die Keyboard Routine vom Prozess hooken und umschreiben kann, weiß ich leider nicht
Dann wirst du dein Vorhaben wohl oder übel nicht ohne Virtualisierung oder einer Server Version von Windows umsetzen können.
Keyboard-Driver sind ne große Nummer
Keyboard hooks sind relativ einfach umzusetzen, wenn man sich mit Reversen auskennt
Einen PacketBot halte ich für zu viel des Guten, da ist ein KeyboardRoutine hook einfacher. Das Programm wertet ja irgendwo die PostMessage aufrufe von User32 aus um den Zugriff über "background-clicks" zu verhindern... diese Routine kann man anpassen.

Virtualisieren geht immer. Einfach ne VM aufsetzen und die Programme dort drin laufen lassen.
Wenn du ne Server Version von Windows nutzt, kannst du mit multiplen Usern zeitgleich eingeloggt sein und per RDP alles steuern...
07/30/2015 17:10 lolkop#11
Von was genau reden wir denn hier? In einer normalen Windows Anwendung ist das nutzen interner Funktionen tasächlich sehr einfach. Sobald es um Webapplikationen geht, ist das ganze schon etwas kniffliger. Dort wäre eine Umleitung auf einen eigenen Proxy und das handeln über Packets wohl das eleganteste.

Post- und SendMessage machen beide Probleme, sobald Funktionstasten (Ctrl, Alt, Shift, ...) ins Spiel kommen. Ohne Hooks oder komplettes Ersetzen der Anwendung, wirst du dein Problem also nicht lösen können.
07/30/2015 20:24 Moneypulation#12
Danke für all eure Antworten. Habe ein Workaround um das Problem gefunden
07/30/2015 23:47 YatoDev#13
Quote:
Originally Posted by Moneypulation View Post
Danke für all eure Antworten. Habe ein Workaround um das Problem gefunden
war es denn meine lösung? wäre nice wenn du die lösung postest.

Code:
_WinAPI_PostMessage ( $hWnd, 0x0006, 0, 0 )