Maus Koordianten einlesen

Krümel

Mitglied
Hallo!

Ich wollte versuchen mit C die "xeyes" unter Linux nachzuprogrammiern.Diese kleinen Augen blicken immer in Richtung des Mauszeigers. Ich dachte mir zunächst, dies sei ganz leicht, da ich unter C die Augen graphisch darstellen kann, Windows Messages einlesen kann und auch die Mauskoordinaten, wofür ich die Funktionen
- GetMessage()
- PeekMessage()
- YieldMessage()
und die Window Message WM_MOUSEMOVE
verwendet habe.
Das Problem ist nun aber, dass mein Programm nur so lange funktioniert, wie sich der Mauszeiger auf meinem Fenster befindet, bzw. solange bis nichts außerhalb des Fensters angeklickt wird.
Kann mir vielleicht jemand sagen, wie man alle Windows Messages empfangen kann, auch die, die nicht an das Programm direkt gehen.
 
Das geht meiner Meinung nach nur mit einem HOOK. Ein HOOK ist wie der Name schon sagt ein Haken der sich in die Windows-Nachrichten-Schleife hängt.
Damit kann man dann nämlich alle Nachrichten die so über den Win-Äter *g* gehen abfangen und die benötigten auswerten bzw. Verarbeiten.
Wichtig ist dabei, daß man die Nachrichten wieder weiterschickt, da sonst dein Programm, oder sogar mit großer Warscheinlichkeit die ganze Windows schose abstürtzt.
Unter Windows muss man da glaub ich auch mit DLL's arbeiten, da es aus technischen Gründen nicht anders geht.
Ich selbst habe dazu auch mal was gemacht und es besteht auch ein Thread der vielleicht interessant für dich sein dürfte:
http://www.tutorials.de/forum/showthread.php?threadid=22044

Gruss Homer
P.S. solltest du es denoch nicht hinbekommen, dann meld dich nochmal, dann kann ich dir nen bsp. Code schicken.
 
Also das mit der Hookfunktion und so funktioniert prima, bloß hab ich nen kleines Problem mit dem lParam Wert, der der Funktion MouseProc(UINT mode, WPARAM wParam, LPARAM lParam) übergebn wird. Dieser soll angeblich nen Pointer auf eine MOUSEHOOKSTRUCT Struktur sein woraus man dann die Mauskoordinaten auslesen könnte.
Doch das bekomm ich einfach nicht hin.
Ich habs folgerndermaßen probiert:

MOUSEHOOKSTRUCT mhs = (MOUSEHOKSTRUCT) lParam;

Doch das macht der Compiler nicht mit und meldet "can't cast from long to MOUSEHOOKSTRUCT".
 
bloß hab ich nen kleines Problem mit dem lParam Wert, der der Funktion MouseProc(UINT mode, WPARAM wParam, LPARAM lParam) übergebn wird. Dieser soll angeblich nen Pointer auf eine MOUSEHOOKSTRUCT Struktur sein woraus man dann die Mauskoordinaten auslesen könnte.
Das ist richtig. Nur du versuchst den lParam in eine MOUSEHOOKSTRUCT selbst zu casten und das muss schief gehen. Du musst den lParam in einen Zeiger auf eine MOUSEHOOKSTRUCT casten. Das ist der springende Punkt.
Versuch das mal so:
Code:
MouseProc(UINT mode, WPARAM wParam, LPARAM lParam)
{
  ...
  MOUSEHOOKSTRUCT *mhs = (MOUSEHOOKSTRUCT*)lParam;
  ... 
}

Gruss Homer
 

Neue Beiträge

Zurück