Seite 1 von 2
Maustaste abfragen von einem anderem Programmfenster?
Verfasst: 30.09.2005 12:11
von Dr.Pixel
Hallo.
Wie kann ich die mittlere Maustaste abfragen, wenn sie gedrückt ist
in einem bestimmten Fenster?
Reicht es aus, wenn ich das handle habe?
Wenn ja, wie gebe ich das handle an WaitWindowEvent() weiter?
Danke.
Hier mein Code:
Code: Alles auswählen
Debug "Bitte drücken sie die mittlere Maustaste!"
GetCursorPos_(st.POINT)
Debug st\x
Debug st\y
Repeat
Select WaitWindowEvent()
Case #WM_MBUTTONDOWN
Debug "#WM_MBUTTONDOWN " + Str(EventwParam())
Debug "#WM_MBUTTONDOWN " + Str(EventlParam())
Case #WM_MBUTTONUP
Debug "#WM_MBUTTONUP " + Str(EventwParam())
Debug "#WM_MBUTTONUP " + Str(EventlParam())
EndSelect
Debug "-----------------"
ForEver
End
Re: Maustaste abfragen von einem anderem Programmfenster?
Verfasst: 30.09.2005 13:13
von Kiffi
> Wie kann ich die mittlere Maustaste abfragen, wenn sie gedrückt ist
> in einem bestimmten Fenster?
in einem bestimmten Fenster Deiner Applikation oder in irgendeinem
'fremden' Fenster?
Grüße ... Kiffi
Verfasst: 30.09.2005 13:30
von Dr.Pixel
... in irgendeinem 'fremden' Fenster !
Handle habe ich schon herausgefunden!
Und nun?
Vielleicht so:
Select WaitWindowEvent(handle_vom_femden_Fenster)
Verfasst: 30.09.2005 13:49
von Kiffi
> Vielleicht so:
> Select WaitWindowEvent(handle_vom_femden_Fenster)
ja, das wäre schön, wenn es so funktionierte. Aber leider ist dem nicht so.
Vereinfacht gesagt flitzen auf Deinem Rechner eine ganze Menge an
Nachrichten durch den Speicher. Diese Nachrichten entstehen, wenn Du
beispielweise an Deiner Maus wackelst, wenn Du ein Fenster öffnest /
schliesst oder bewegst, Tasten drückst, etc., etc., etc.
Dein Aufgabe ist es nun, diesen Nachrichtenstrom abzuhören und
diejenigen mausbezogenen Nachrichten herauszufiltern, die das fremde
Fenster betreffen. Das kann man nur mit einem globalen Hook realisieren
und ist nicht ganz trivial.
Ich glaube, dass es in diesem Forum sowie im englischen Forum als auch
im PureBoard-Archiv einige Informationen hierzu gibt.
Grüße ... Kiffi
Verfasst: 30.09.2005 14:36
von Batze
Kiffi hat geschrieben:Ich glaube, dass es in diesem Forum sowie im englischen Forum als auch
im PureBoard-Archiv einige Informationen hierzu gibt.
Und wo, ich find die nämlich nicht.

Verfasst: 30.09.2005 15:15
von Dr.Pixel
Ich so schnell auch nicht

Verfasst: 30.09.2005 15:54
von Kiffi
z.B.
http://forums.purebasic.com/english/vie ... lobal+hook
Der Beitrag von dracflamloc könnte ziemlich gut passen.
Grüße ... Kiffi
Verfasst: 30.09.2005 17:12
von Batze
OK, danke.

Verfasst: 30.09.2005 22:24
von Mischa
Einfach und schmerzlos
Code: Alles auswählen
Repeat
GetAsyncKeyState_(#VK_MBUTTON)
If GetAsyncKeyState_(#VK_MBUTTON)
Beep_(500,50)
EndIf
ForEver
Natürlich mit Debugger starten.
Ist natürlich "Dauerfeuer", sollte aber ja leicht anzupassen sein.
Gruß,
Mischa
Verfasst: 04.10.2005 15:06
von Dr.Pixel
Besser wäre aber:
Code: Alles auswählen
Repeat
GetAsyncKeyState_(#VK_MBUTTON)
If GetAsyncKeyState_(#VK_MBUTTON)
Beep_(500,50)
EndIf
Delay(1)
ForEver
...sonst bekomme ich ohne "Delay(1)" eine 100% Auslastung meines Rechners!
Kennt jemand einen anderen Befehl als Delay, damit die Rechnerauslastung vielleicht sogar gegen Null läuft?
Denn wenn ich an einer bestimmten Programmstelle
mein Programm mit Delay(5000) für 5 Sekunden anhalte,
ist das System auch wieder mit 100% Auslastung belegt!!!
Warum?
Mein Rechner soll doch nur 5 Sekunden warten und nicht 5 Sekunden in Vollauslastung fahren !!!!!
Hat jemand eine Idee mit Codebeispiel?
Danke,
Dr. Pixel