Text direkt auf desktop darstellen



  • n Abend,

    ich möchte ein Prog schreiben welches nur im Hintergrund läuft, nur Taskleistensymbol, (kein Problem bis hier).
    Ab und zu muss das Prog aber auch text ausgeben, wenn möglich gleich ohne ein hässliches Fenster und sehr groß(will das vom Bett aus lesen können).
    geht das, muss ich da mit Directx oder OpenGl rumvorwerken oder gibt es eine Möglichkeit direkt in C# mit DotNet?

    Vielen Dank im voraus

    Hotblack



  • Benutz doch nen Transparentes Fenster, dann bleibt nur der Text praktisch übrig der Angezeigt wird. Muss man gar nicht kompliziert über DX oder OGl machen.



  • Das funktioniert zwar einfach mittels der WinApi, aber irgentwie will der Text dann nicht mehr vom Desktop verschwinden. Daher ist das transparente Fenster am besten geeignet.



  • Das stimmt so könnte man das machen, aber ich möchte das Prog wirklich nur im Hintergrund laufen lassen. Es soll auf Tastatur reagieren(Funktionen in anderen Anwedungen auslösen zB Play in Mediaplayer...) und wenn mein Prog nicht im Hintergrund läuft dann "behindert" es ja die Sicht auf Mediaplayer etc. und das will ich eigentlich nicht. Zur Not muss ich das aber so machen das Mediaplayer danach wieder in den Vordergrund kommt.
    trotzdem danke für die Info

    MfG Fabian



  • Ich hab das mal vor langer Zeit (3 Jahre ) gemacht. Direkt mit .NET geht es nicht, aber mit der WinAPI, einfach mit dllimport aufrufen. Transapente Fenster haben den nachteil das der Focus auf die derzeit bestehende Anwendung verloren geht.

    Einfach den Handle des Desktop (mit NULL) holen und den den Bereich den du beschreiben willst in ein Bitmap blitten, danach kannst du in den Bereich schreiben, wenn du alles wieder bereinigen möchtest einfach das Bitmap wieder zurück blitten.



  • Wenn es jemand hin bekommen bekommen hat, wäre es nett wenn er den Code hier ma posten würde. Denn mich (und vielleicht auch noch ein paar andere die diesen Thread hier lesen) intressiert das auch mal. Danke.



  • Hab das jetzt nach längeren versuchen nicht hingekriegt 🙄 🙄

    Bin auch net so fit in WinApi, ich wäre aber dankbar wenn mir aml jemand eine kleine Denkhilfe in Form eines Codebeispiels geben könnte!!

    danke im voraus

    mfg Fabian



  • versuchs mal mit folgenden Funktionen aus der Winapi
    habs aber noch nicht 100% getestet.

    using System.Runtime.InteropServices;	//DllImport
                    [DllImport("gdi32.dll", SetLastError=true)]
    		private static extern IntPtr CreateDC(
    			string lpszDriver,      // driver name
    			string lpszDevice,      // device name
    			string lpszOutput,      // not used; should be NULL
    			IntPtr lpInitData		// optional printer data
    		);
    
    		[DllImport("user32.dll", SetLastError=true)]
    		private static extern bool InvalidateRect(
    			IntPtr hWnd,           // handle to window
    			ref RECT lpRect,  // rectangle coordinates
    			bool bErase   
    		);
    		[DllImport("user32.dll", SetLastError=true)]
    		private static extern IntPtr WindowFromDC(IntPtr ptr);
    
    		[DllImport("user32.dll", SetLastError=true)]
    		private static extern int ReleaseDC(
    			IntPtr hWnd,		// handle to window
    			IntPtr hDC			// handle to DC
    		);
    		[DllImport("gdi32.dll", SetLastError=true)]
    		private static extern bool LineTo(
    			IntPtr hdc,			// device context handle
    			int nXEnd,			// x-coordinate of ending point
    			int nYEnd			// y-coordinate of ending point
    		);
    		[DllImport("gdi32.dll", SetLastError=true)]
    		private static extern bool MoveToEx(
    			IntPtr hdc,			// handle to device context
    			int X,				// x-coordinate of new current position
    			int Y,				// y-coordinate of new current position
    			IntPtr lpPoint		// old current position
    		);
    		[DllImport("gdi32.dll", SetLastError=true)]
    		private static extern IntPtr CreatePen(
    			int fnPenStyle,		// pen style
    			int nWidth,			// pen width
    			int crColor			// pen color
    		);
    		[DllImport("gdi32.dll", SetLastError=true)]
    		private static extern IntPtr SelectObject(
    			IntPtr hdc,			// handle to DC
    			IntPtr hgdiobj		// handle to object
    			);
    		[DllImport("gdi32.dll", SetLastError=true)]
    		private static extern bool DeleteObject(
    			IntPtr hObject		// handle to graphic object
    			);
    		[StructLayout( LayoutKind.Sequential)] 
    		struct RECT
    		{
    			public long left; 
    			public long top; 
    			public long right; 
    			public long bottom; 
    		}
    


  • ich würde dieses Funktionalität in C/C++ implementieren und die fertige dll einbinden.



  • AndreasW schrieb:

    ich würde dieses Funktionalität in C/C++ implementieren und die fertige dll einbinden.

    und welchen Vorteil würde dies haben?



  • du müsstest nicht krampfhaft die dlls nach C# importieren.



  • huhu

    AndreasW schrieb:

    du müsstest nicht krampfhaft die dlls nach C# importieren.

    wieso krampfhaft 😕 😕
    Ist doch total easy... Verstehe irgendwie nicht wo das problem dabei liegt.
    Problematisch ist das ja nur bei Doppelzeiger geschichten aber das ist ja selten in der Winapi!



  • ich habe nicht behauptet, das es ein Problem oder Falsch ist die dlls zu importieren. Ich habe nur gesagt dass ich das nicht machen würde. Was du machst ist mir ja egal.


Anmelden zum Antworten