Cursorposition im aktiven Fenster vom IExplorer

Deckelsjupp

Grünschnabel
Hallo Zusammen,

ich suche jetzt schon lange und bezweifele fast das es Möglich ist.

Ich möchte ohne Mausklick grafische Funktionen in einem Fenster eines Leitsystems ausführen, nur beim fahren des Mauszeigers über das Fenster.

hierzu ermittele ich die aktuelle Zeigerposition mittels GetCursorPos welche mir natürlich die Position in dem gesamten Bildschirm wiedergibt. Jetzt ermittele ich die Fensterposition mit GetWindowRect, diese gibt mir die Punkte des äußeren IExplorer Rahmen. Bei Vollbild ginge das, aber bei Fensterdarstellung setzt sich ja noch der Rahmen, Titelleiste und je nach Einstellung noch einige Menüleisten darüber die ich nicht ermitteln kann um die Cursorposition in meiner Grafik zu bestimmen.

Weiß jemand ob das geht?
GetClientRect und ScreenToClient habe ich schon ausprobiert. Ich meine die nützen mich nichts.


Gruss Deckelsjupp
 
Hallo Deckelsjupp

ScreenToClient ist eigentlich genau das was du suchst, alternativ vielleicht MapWindowPoints. Was funktioniert da denn nicht?

Viele Grüsse
Cromon
 
Hallo Cromon,
bei ScreenToClient bekomme ich die Minuswerte zurück, das ist ja Okay aber zurück gerechnet beziehen die sich wieder auf den äußeren Rand des IExporer Fenster.
Ist mein Handle falsch?
Gruß Deckelsjupp
 
Hallo Deckelsjupp

Das kann ich dir ohne Code so nicht sagen. Du musst halt den Handle des Fenster angeben zu dessen Clientarea du die Koordinaten relativ haben willst.

Viele Grüsse
Cromon
 
Hallo Cromon,
so arbeitet mein Code und gibt auch Werte zurück.


Printf bringt jetzt als Test "Pointer 400/196 X -97 Y -102 WIN 93 79 1419 965"
mit den XY Werten komme ich aber nicht in mein Fenster, dieses wäre der Fensterbegin unter dem Favoritenstern. Gruß Deckelsjupp


Darstellung gewünschter Nullpunkt.jpg

C:
HWND Handle;
RECT RectPosWin;
POINT CliPoint;
POINT myPoint;
long left, top, height, width;
long WINleft, WINtop, WINright, WINbottom;
long CLIleft, CLItop, CLIright, CLIbottom;
char * cValue;

Handle=FindWindow("IEFrame",NULL);
cValue = SysMalloc(255);
if (Handle)
{
   GetWindowRect(Handle,&RectPosWin);
   WINleft = RectPosWin.left;
   WINtop = RectPosWin.top;
   WINright = RectPosWin.right;
   WINbottom = RectPosWin.bottom;

   ScreenToClient(Handle,&CliPoint);
   CLIleft = CliPoint.x;
   CLItop = CliPoint.y;
}
 
left = GetLeft(lpszPictureName,lpszObjectName);
top = GetTop(lpszPictureName,lpszObjectName);
height = GetHeight(lpszPictureName,lpszObjectName);
width = GetWidth(lpszPictureName,lpszObjectName);

GetCursorPos(&myPoint);

sprintf(cValue,"%Pointer %d/%d X %i Y %i WIN %i %i %i %i",
myPoint.x, myPoint.y, CLIleft, CLItop, WINleft, WINtop, WINright, WINbottom);

return cValue;
 
Zuletzt bearbeitet von einem Moderator:
Hallo Deckelsjupp

Was mir bei deinem Code primär mal auffällt:
Code:
ScreenToClient(Handle,&CliPoint);

Du verwendest CliPoint, aber du hast da gar nie einen Wert zugewiesen. ScreenToClient nimmt die Koordinaten in dem übergebenen Punkt, wandelt sie in clientkoordinaten um und speichert sie im gleichen Punkt. Bei dir werden aber einfach unitialisierte Werte umgewandelt. Fehlt da was im kopierten Code oder könnte das bereits der Ursprung sein? Wenn nicht, dann müssen wir nochmals schauen, habe deine Beschreibung mit dem Bild nicht 100% verstanden.

Viele Grüsse
Cromon
 
Hallo Cromon,
Vielen Dank für Dein Interesse, aber was soll ich CliPoint für einen Wert zuweisen? Der wäre doch immer variabel?
Gruß Deckelsjupp
 
Hallo Deckelsjupp

Bevor du ScreenToClient aufrufst muss in dem Parameter POINT den du übergibst das Koordinatenpaar des Cursors in Screenkoordinaten (wie von GetCursorPos zurückgegeben) drin stehen, also:
Code:
POINT pt = { 0 };
GetCursorPos(&pt);
ScreenToClient(hExplorer, &pt);

Viele Grüsse
Cromon
 
Hallo Cromon,

der Schritt war gut, jetzt bin ich schon mal im IExplorerfenster, gibt es nun auch noch die Möglichkeit die Position "gewünscht" zu ermitteln?
Man weiß ja nie welche Leisten noch aktiviert sind.
Ich habe hier mal zwei Pfeile eingebaut um das besser darzustellen.

Darstellung gewünschter Nullpunkt.jpg

Gruß Deckelsjupp
 
Zurück