C++ -> Ubuntu -> Maus position ?

Hallo,
kann mir bitte jemand sagen wie ich unter Ubuntu mit Eclipse und C++ die Mausposition auslesen kann?

Ich habe es schon gegoogelt aber nicht wirklich was gefunden (immer nur für Windows).

Ein kleines Beispiel wäre echt toll.



Danke schonmal
Exit
 
Hehe, ich musste da auch ne Weile nach graben. ^^
Das Ganze läuft über den X-Server, darum solltest du dir die Libs dazu mal ansehen:
Code:
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
Dazu dann ggf. mit "-lX11" und "-lXtst" linken.
Mit denen kann man schonmal Mausposition abfragen, sowie Tastendrücke simulieren, und, und, und...
Außerdem müssen die Pakete noch her, am besten über Synaptic oder so suchen, hab ich gerade nicht im Kopf. Oo

Hier mal ein Beispiel zur Mausposition:
Code:
void Get_Mouse_positon()
{
      Display *d;
      Window inwin; 
      Window inchildwin;
      int rootx, rooty; 
      int childx, childy; 
      Atom atom_type_prop;
      int actual_format;
      unsigned int mask;
      unsigned long n_items, bytes_after_ret;
      Window *props;

      d = XOpenDisplay(NULL);

      (void)XGetWindowProperty(d, DefaultRootWindow(d),
                   XInternAtom(d, "_NET_ACTIVE_WINDOW", True),
                   0, 1, False, AnyPropertyType,
                   &atom_type_prop, &actual_format,
                   &n_items, &bytes_after_ret, (unsigned char**)&props);

      XQueryPointer(d, props[0], &inwin,  &inchildwin,
            &rootx, &rooty, &childx, &childy, &mask);
      printf("relative to active window: %d,%d\n", childx, childy);
      printf("absolute: %d,%d\n", rootx, rooty);

      XFree(props);
      (void)XCloseDisplay(d);
}

Jetzt tu mir aber einen Gefallen und bastel nicht gleich einen Keylogger, ok? -.-°
 
danke erstmal,

Ich hab mich in der Zwischenzeit etwas mit "ncurses.h " auseinander gesetzt. Und dieses Beispiel ausprobiert:

Code:
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <ncurses.h>
using namespace std;

int main()
{
int ch;
MEVENT event;
ch = getch();

if(ch == KEY_MOUSE)
{
    if(getmouse(&event) == OK)
        {
       cout<<"Button Pressed";
        }
}
return 0;
}

Jetzt bekomm ich aber diese Fehler hier:

Description Resource Path Location Type
undefined reference to `getmouse' main.cpp /Maus/src line 19 C/C++ Problem
undefined reference to `stdscr' main.cpp /Maus/src line 12 C/C++ Problem
undefined reference to `wgetch' main.cpp /Maus/src line 12 C/C++ Problem

Ich nutze ECLIPSE und C++ !

Es macht den Eindruck das Eclipse die Header Datei nicht findet, aber in den Include Files stehen sie drin und auch im Quellcode wird nichts rot markiert... habe sie über synaptics installiert.

Ist es ein Linkerproblem des g++?

kann mir jemand helfen?
 
Naja, kann man auch so machen... Ich fänd's nur allgemein sinnvoll sich mit dem X-Server auseinander zu setzen, weil der doch einiges mehr an funktionen bietet. Aber ich erzähl das dann mal Wayne... Oo

Ich habe den ncurses.h in irgendeinem Projekt, das ich gerade zur Hand hatte, includiert und es compiliert einwandfrei. Hast du auch brav die linker-flag für ncurses gesetzt?
Ich weis jetzt ja nicht, in wie fern du dich auskennst... Bei Eclipse geht das folgendermaßen:
Rechtsklick auf's Projekt -> Properties -> C/C++ Build -> Settings -> GCC C++ Linker -> Libraries und dort bei "libraries (-l)" auf + und "ncurses" hinzufügen.
Sollte reichen, aber nicht getestet.
 
hey danke,

das mit der linking flag hab ich mir gestern auch noch gedacht und nach einigem suchen auch hinbekommen. Jetzt gehts.

Danke für deine Hilfe. Das mit dem X-Server ist bestimmt sinnvoll, mir aber im Moment noch etwas zu kompliziert.

Danke nochmal für die guten Antworten.

Exit
 
Zurück
Oben