C# Cursor Bild abfragen

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo Leute,
sagt mal... gibt es in C# ne möglichkeit stets das aktuelle Cursor Bild abzufragen bzw. in eine Bitmap zu speichern?

Ich habs mit "Cursor cursor = Cursor.Current" probiert, aber allem anschein nach gibt es mir nur den Cursor beim Programmstart zurück. Würd aber gern das aktuelle Icon vom Cursor speichern, jedes mal wenn der sich ändert.

z.B. wenn man über einen Text fährt, dann ändert sich ja der Cursor, den hätte ich dann in einem Bitmap oder wenn man wo drüber fährt, dann ändert er sich ja wieder und dann hätte ich den im Bitmap.

Cursor.Current gibt mir aber nur einmalig den Cursor beim Programmstart zurück...

Hat jemand eine Idee?
 
das versteh ich jetzt nicht? könntest du mal bitte genau beschreiben was du willst.
Willst du, dass sich der Cursor verändert, wenn du wo drüber fährst?
 
Nein.

Also folgendes Problem:
Ich habe eine Anwendung. Diese macht die ganze Zeit über Screenshots vom Desktop. Natürlich muss da auch der Cursor drauf sein. Da aber "Graphics.CopyFromScreen" den Cursor selber nicht erfasst muss ich ihn explizit abspeichern.

Nun habe ich die "Cursor-Klasse" dazu verwenden wollen den Cursor auf den Screenshot zu zeichnen. Es funktioniert auch soweit. Damit schaffe ich es den Cursor an die richtige Position im Screenshot zu zeichnen, ABER der zeichnet mir nur einen einzigen Cursor (z.B. den stinknormalen Pfeil!).

Ich will aber wenn mein Cursor gerade sich über einem Text befindet nicht den Pfeil auf dem Screenshot sehen, sondern den Cursor der mir auch wirklich angezeigt wird (dieser Strich-Cursor).

Und genau das klappt halt eben nicht :(

PS: gerade habe ich gemerkt, dass ich das aktuelle Cursor-Icon auf dem Screenshot bekomme, wenn meine Anwendung den Focus hat, aber wie bekomme ichs hin, wenn sie nicht den Focus hat sondern im Hintergrund läuft?

Auf WinAPI-Funktionen würde ich gerne verzichten wenns geht.
 
aber wie bekomme ichs hin, wenn sie nicht den Focus hat sondern im Hintergrund läuft?
MMn gar nicht! Es gibt meines Wissens nach keine globale Abfrage und Verwaltung des Cursors. Das siehst du bei zahlreichen Anwendung, die eine Sanduhr verwenden. Diese verschwindet nämlich wenn du woanders hinklickst.
 
Zuletzt bearbeitet:
Wieso sollte ichs GAR NICHT hinbekommen -_-" ? Mit WinAPI-Funktionen ist es durch aus möglich. Hab die Lösung sogar ne Zeit lang verwendet, aber die gefällt mir halt nicht. Häts lieber mit .Net gelöst...
 
Dann nehm ich meine Aussage aus Unwissenheit zurück und würde mich freuen, wenn du eine Lösung findest, und diese dann auch mit uns teilst =)
 
Also die Lösung mit der WinAPI kann ich gerne mit euch teilen...

PHP:
public static Bitmap CaptureCursor(ref int x, ref int y) {
	try {
		Bitmap bmp;
		IntPtr hicon;
		Win32Stuff.CURSORINFO ci = new Win32Stuff.CURSORINFO();
		Win32Stuff.ICONINFO icInfo;
		ci.cbSize = Marshal.SizeOf(ci);

		if (Win32Stuff.GetCursorInfo(out ci)) {
			if (ci.flags == Win32Stuff.CURSOR_SHOWING) {
				hicon = Win32Stuff.CopyIcon(ci.hCursor);

				if (Win32Stuff.GetIconInfo(hicon, out icInfo)) {
					x = ci.ptScreenPos.x - ((int)icInfo.xHotspot);
					y = ci.ptScreenPos.y - ((int)icInfo.yHotspot);

					Icon ic = Icon.FromHandle(hicon);
					bmp = ic.ToBitmap();

					return bmp;
				}
			}
		}
	} catch (Exception ex) {
	}

	return null;
}

Diese hier hab ich übrigens von Code-Project. HIER der Link zur Bibliothek.

Sollte ich es schaffen das ganze rein in .Net lösen zu können, dann teile ich die Lösung natürlich auch gern mit ;-)
 
Zurück
Oben