![]() |
Mauscursor setzen
hi, eine frage:
ist es in java möglich, den bildschirmcursor, also das nette kleine pfeilchen, an bestimmte positionen zu setzen? nach mehreren stunden google und javadoc durchforstung hab ich noch immer nix gefunden und mich würd jetzt interessieren ob das geht. und wenn nicht, in welchen sprachen ist dies möglich? |
public void setCursor(Cursor cursor) in java.awt.Component
schau mal bei go2java genau nach, wie das gehandled wird. |
mit dem kann ich leider nur den cursortyp (hand, zeiger, sanduhr usw) setzen, nicht aber die position.
aus dem durchschauen des winVNC sources bin ich nicht wirklich schlau geworden, liegt auch daran, dass ich nicht wirklich viel ahnung von c++ hab (bissi mehr als nix um genau zu sein) |
mit setCaretPosition wird der Cursor für ein Eingabefeld gesetzt. In Java wird der eben Caret genannt. Wahrscheinlich, um Verwechslungen mit dem Datenbank-Cursor zu vermeiden.
|
Der Ausdruck "Caret" wird für den Textfeldcursor verwendet, sonst ist es der Pfeil oder die Sanduhr etc. Caret bedeutet Eingabemarke.
Mit <BOOL> SetCursorPos(int X,int Y) kann man den (Maus-)Cursor an die übergebene Bildschirmposition verschieben. mfg Kikakater |
danke, das genau würd ich brauchen
ich welcher klasse find ich das? |
Ich habe den Microsoft Schinken nicht installiert, entweder suchst Du im www.google.com nach +mfc +setcursorpos oder Du wirfst VS/C++ an und benutzt die Hilfe. Sei nicht so faul ... alles hinterhertragen geht auch wieder nicht. :rolleyes:
P.S: Ich würde es mit ::SetCursorPos(x,y) versuchen. |
uiuiuiuiui.......
ich glaub net dass er JAVA im MS Visual Studio programiert, und das mit faul wird er a net auf sich sizten lassen! |
Zitat:
|
ok, da bis jetzt die rede von java war und du etwas gach auf c++ umgestiegen bist (ohne das anzukündigen) war die verwirrung dementsprechend.
und dass ich von c++ noch nicht viel ahnung hab hab ich im ersten posting schon erwähnt. weiters hab ich jetzt doch schon etliche stunden damit verbracht, eine möglichkeit im google zu suchen, so dass ich, meiner meinung nach zurecht, jetzt gerne einen hinweis hätte, mit dem ich was anfangen kann (sonst hätt ich nicht gepostet) dass ich das ganze in c++ suchen muss, auch der funktionsname selber ist schon starke hilfe, danke. jedoch bitte nicht immer gleich aufregen.:rolleyes: |
Ist ja nur, weil Java so attraktiv nun auch wieder nicht ist. Langsam, absturzgefährdet usw. Java 2 ist da sicher schon eine Verbesserung.
|
setLocation(Point p) aus java.awt.Component scheint das Richtige zu sein.
|
nicht unbedingt, damit kann ich ein component verschieben, cursor hat als parent aber object
|
Java oder C++
Zitat:
2. in welchem Objekt willst du den Cursor setzen? Davon hängt schließlich ab, welche Klasse du verwenden mußt. |
ok, zur aufklärung mal das vorhaben
ich möcht so ne art alternative maussteuerung machen, wie zb den cursor über die tasten zu bewegen. ich hab grundlegende kenntnisse von C, etwas mehr von java und fast nichts von c++ (außer dass ich quellcode ungefähr verstehe, wenn er nicht zu hochtrabend wird) das problem ist, dass ich derzeit nur die idee habe, und ich jetzt, bevor ich mich groß darauf stürze eine sprache suche, wie ich diesen cursor überhaupt bewegen kann. |
Es ist alles gesagt im Moment, bis auf Java ... mußt halt die richtige Klasse instanzieren um mittels setLocation den Mauscursor zu positionieren.
|
mit setLocation kann ich leider nur ein Component, nicht aber einen Cursor bewegen.
sprich ich kann zwar das window irgendwohin verschieben, allerdings nicht den cursor |
Verwende doch C ;) bei Java würde ich mich einmal näher informieren in einem Java Forum, ob man die Position und wenn dann wie setzen kann.
|
Zitat:
2. Verwende in Java einen Key-Listener Dabei mußt du dann das Objekt ermitteln, auf welchem gerade der Mauszeiger liegt, anschließend die X-Y-Position intern hochzählen und bestimmen, an welches Objekt du den Mauszeiger weitergibst. Du mußt gar keinen Cursor setzen! Java arbeitet mit Mouse-Events und nimmt dir den komplizierten betriebssystem-abhängigen Teil der Maussteuerung ab! |
1. verflixt :eek:
das wird hart. über ein im hintergrund laufendes programm würde es nicht funktionieren? 2. ich hab es gestern mit MouseEvent.translatePoint versucht, das bewegt zwar vielleicht intern den point, allerdings tut sich beim bildschirmcursor nix |
Zitat:
|
Du mußt nach dem translatePoint ein postEvent(event) aufrufen, das macht das gleiche wie - PostMessage unter Windows, beispielsweise. Dem Betriebssystem wird durch das postEvent(event) mitgeteilt ein SetCursorPos erst jetzt explizit - unter Windows z.B. - auszuführen.
|
Zitat:
2. Jedes Objekt, das auf Bewegungen des Mauszeigers reagieren soll, muß sich als Mouse-Listener angemeldet haben. Falls die Maus über dem Objekt etwas tut, wird das Objekt entsprechend darüber informiert. |
hmm, ich weiß nicht
für mich is n treiber die schnittstelle zwischen hardware und OS und deshalb geräteabhängig. n server is zB für mich n im hintergrund laufendes programm. aber ich glaub ich werd trotzdem was treiberähnliches programmieren müssen. das mit dem MouseListener stimmt nur bedingt glaub ich. für die Bewegungen selbst ist der MotionListener verantwortlich, der MouseListener erkennt nur die tasten bzw das mouseEntered und mouseLeaved. ändert jedoch leider nichts an der tatsache dass es nicht mit java geht. |
vielleicht
geht es ja mit DirectX SDK
Dort sollte es etwas geben, mit dem du direkt die Tastatur abfragst und eine Mouse-Move-Message an alle Anwendungen schicken kannst.:o |
das wäre ja gelacht, wenn man einen cursor nicht setztn kann wo man will!!
in der klasse Cursor hast du schon nachgeschaut - wie ich vermute ich werd mich mal ein wenig auf die suche machen, aber heute nicht mehr (GÄÄÄHHHHN ...) |
Die Lösung des Problems stellt sich folgendermaßen dar:
1. Eine systemweite Hookfunktion für die Tastaturnachrichten einrichten 2. In dieser Hookfunktion werden die gewünschten Tastencodes für die zu generierenden Mauszeigerversatz (Positionierung) Nachrichten / Funktionsaufrufe ausgefiltert und zur Steuerung des Mauszeigers herangezogen. D.h. es wird mittels switch Anweisung und case Fällen die entsprechende Positionsveränderung durchgeführt. Unter Java passiert dies mit der Erzeugung eines Mausevents mittels new und dem Aufruf von translatePoint sowie dem Einreihen der Nachricht in der Ereigniswarteschlange (Event Queue) mit postEvent. Das ganze soll sich ja auf den Desktop beziehen, im Übrigen auch auf alle Anwendungen, im übrigen auch auf alle Fenster aller Anwendungen. Insofern muß man eine systemweite Hookfunktion auf die Tastatur einrichten. Wie geschieht das ganze in der Praxis, warum Java :p ? besser in einfachem C, da funktioniert es wenigstens einfach: *) Hookfunktion einrichten Code:
MyKeybdHookHandleNr=SetWindowsHookEx( Code:
LRESULT CALLBACK MyBliBlaTralalaKeybdHookFunktion( MyKeybdHookHandleNr ist vom Typ HHOOK und muß eine globale Variable sein, max_desktopx und max_desktopy sind vom Typ int und ebenso globale Variablen, beschaffbar von Windows mittels dieser zwei Aufrufe: max_desktopx=GetSystemMetrics(SM_CXSCREEN); max_desktopy=GetSystemMetrics(SM_CYSCREEN); |
Uiuiuiui... des wird jetzt aber kompliziert...
maus mit cursortasten bewegen.. ging doch in windoofs eh schon immer.. musst halt die EINGABEHILFEN installieren. Da is sowas praktischerweise gleich dabei :) wollt ich nur mal so am rand bemerkt haben... |
@kikakater
wow, danke, werd mich mal durchackern und verstehen probieren. großen dank. @sesa mina das weiß ich, hilft mir in meinem konkreten fall nicht weiter. trotzdem danke |
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag