Maustaste abfragen von einem anderem Programmfenster?

Anfängerfragen zum Programmieren mit PureBasic.
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Maustaste abfragen von einem anderem Programmfenster?

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Maustaste abfragen von einem anderem Programmfenster?

Beitrag 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
a²+b²=mc²
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag von Dr.Pixel »

... in irgendeinem 'fremden' Fenster !
Handle habe ich schon herausgefunden!
Und nun?
Vielleicht so:

Select WaitWindowEvent(handle_vom_femden_Fenster)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag 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. :freak: :oops:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag von Dr.Pixel »

Ich so schnell auch nicht :cry:
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

z.B.

http://forums.purebasic.com/english/vie ... lobal+hook

Der Beitrag von dracflamloc könnte ziemlich gut passen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

OK, danke. :D
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Mischa
Beiträge: 152
Registriert: 29.08.2004 06:52
Wohnort: Hellhorst

Beitrag 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
Dr.Pixel
Beiträge: 90
Registriert: 12.08.2005 12:38

Beitrag 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
Antworten