tutorials.de Buch-Aktion 02/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
4282
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Hi,
    ich versuche gerade meinen Windows Desktop mit .NET zu erweitern. So als kleines Experiment. So weit bin ich im Moment:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As IntPtr
     
    Public ReadOnly DesktopDeviceContext As IntPtr = GetDC(0)
     
    Public Sub Main()
        Using g As Graphics = Graphics.FromHdc(DesktopDeviceContext)
            Dim elapsed As Long = 0
                While elapsed < 5000
                g.FillEllipse(Brushes.WhiteSmoke, New Rectangle(Form.MousePosition.X - 5, Form.MousePosition.Y - 5, 10, 10))
                Threading.Thread.Sleep(1)
                elapsed += 1
            End While
        End Using
    End Sub
    Für 5 Sekunden nach Programmstart kann ich lustige, weisse Kreise auf den Desktop malen, aber ich möchte mehr. Wäre es nicht auch möglich, Controls auf dem Desktop zu platzieren? Ich bekomme auch das Window Handle des Desktops mit
    Code :
    1
    
    Declare Function GetDesktopWindow Lib "user32" () As IntPtr
    heraus, aber das nützt mir nicht viel, da
    Code :
    1
    
    System.Windows.Forms.Form.FromHandle(hwnd as IntPtr)
    Null zurück gibt, wenn der aufrufende Prozess nicht Besitzer des Fensters ist, was ja so rein Sicherheitstechnisch auch Sinn macht.

    Gibt es jetzt irgend eine Möglichkeit, trotzdem an eine Referenz auf "Desktop Control" zu bekommen oder zum Beispiel einen Butten auf dem Desktop zu platzieren, ohne transparente Fenster zu benutzen?
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

  2. #2
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    Registriert seit
    Aug 2001
    Ort
    Österreich, Stmk, Graz
    Beiträge
    2.783
    Hi.

    Mittels FindWindow kannst dir das Handle vom "Fenster" das für den Desktop verantwortlich ist holen. Also, ich meine dieses wo die Icons dargestellt werden. (Denke jetzt mal das es dieses ist, welches sollte es aber auch sonst sein.)

    SetParent verwendest dann, um dein Fenster zum Child davon zu machen.

    Und nun.. das wars auch schon.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern IntPtr FindWindow(
        [MarshalAs(UnmanagedType.LPTStr)]
        string lpClassName,
        [MarshalAs(UnmanagedType.LPTStr)]
        string lpWindowName );
     
    [DllImport("user32.dll")]
    public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent );
    ...
    IntPtr hwndf = this.Handle;
    IntPtr hwndParent = FindWindow("ProgMan", null);
    SetParent(hwndf,hwndParent);

    Wenn du willst, kannst nun auch noch Einstellen, das man mit der Maus durch dein Fenster durchklicken kann.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    [DllImport("user32.dll", SetLastError=true)]
    static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    [DllImport("user32.dll", SetLastError=true)]
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
     
    private const int  GWL_EXSTYLE = -20;
    private const int  WS_EX_TRANSPARENT = 0x20;
    ...
    int exstyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
    exstyle |= WS_EX_TRANSPARENT;
    SetWindowLong(this.Handle, GWL_EXSTYLE, exstyle);


    Das ganze hab ich mal wo, glaube bei CodeProject, aufgeschnappt.

    MfG,
    Alex

    p.s.:
    Hab noch ein kleines Programm zum Verdeutlichen angehängt.
    Es wird ein Fenster erstellt, via TransparentKey / BackgroundColor und der richtigen FormBorderStyle Einstellung sieht man das ganze Fensterzeugs nicht. 2 Buttons gibt es. Der eine zeichnet etwas am Desktop, hab dafür das Import und so aus deinem Code, der andere Beendet das Program.
    Man kann wunderschön sehen, dass die Buttons direkt am Desktop sind. Die Icons sind allerdings noch dahinter.
    Ach.. ich weiss das ich mich beim Projekt-Namen verschrieben hab. Zu dieser Stunde sollte das erlaubt sein.
    Angehängte Dateien Angehängte Dateien
     
    With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
    Aaron Satie

    Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
    Captain Jean-Luc Picard, Stardate ~41294.5

    Tutorials.de chattet. Hier gibts auch .net Support ^^
    Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de

    (moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions

  3. #3
    Avatar von Sunray
    Sunray Sunray ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Schweiz
    Beiträge
    190
    Danke für die Hilfe...
    nur leider gibt
    Code :
    1
    2
    
    Dim fo As New Form1()
    SetParent(GetDesktopWindow(), s.Handle)
    0 zurück. Daraus lässt sich schliessen, dass es so nicht funktioniert. Schade... die WinForm Lösung ist zwar nicht ganz so cool wie den Desktop zu übernehmen aber funktioniert wenigstens ...
     
    Zu jedem Problem gibt es mindestens eine Lösung.
    Zu jeder Lösung gibt es mindestens eine bessere Lösung

  4. #4
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Um das alte Thema wieder mal aufzugreifen:

    Ich pinne gerade mein Form auf meinen Desktop. Funktioniert auch wunderbar: Das Form liegt auf dem Desktop und auch bei "Desktop anzeigen" wird das Form angezeigt.

    Jedoch hab ich zwei Fragen:

    1) Wenn ich das Form auf den Desktop pinne. Sind weder ToolStrip noch MenuStrip anklickbar. Der Hover Funktioniert aber die Buttons werden nicht gedrückt. Woran könnte das Liegen?

    2) Wie kann ich das Fenster vom Desktop wieder abdocken? Einfach als Parent IntPtr.Zero setzen?

    Gruß Daniel
     

  5. #5
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zitat Zitat von Danielku15 Beitrag anzeigen
    2) Wie kann ich das Fenster vom Desktop wieder abdocken? Einfach als Parent IntPtr.Zero setzen?
    http://dotnet-snippets.de/dns/c-prog...en-SID673.aspx
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  6. #6
    Fridulin Fridulin ist offline Mitglied Brokat
    Registriert seit
    Dec 2004
    Beiträge
    309
    Hallo,

    ich möchte so etwas ähnliches machen, meine Form soll nun allerdings noch hinter den Symbolen auf den Desk sein. Sprich direkt vor dem Hintergundbild, aber hinter den Symbolen.
    Das Beispiel mit den Deskbutton funktioniert bei mir leider nicht im neuen BS.

    Hier ist mein Thread, ich habe schon den Beitrag gemeldet und hoffe das der bald verschoben wird in WinForms, da er ja eigentlich dort hinein gehört, finde ich.

    http://www.tutorials.de/forum/net-gr...einbetten.html

    Viele Grüße und für jede Hilfe wäre ich sehr Dankbar.
    Fridulin
     

Ähnliche Themen

  1. Desktop verschieben - Desktop nicht auf Systemplatte speichern...
    Von Thomas Lindner im Forum Microsoft Windows
    Antworten: 9
    Letzter Beitrag: 05.02.09, 01:18
  2. Methoden um Sessions zu missbrauchen
    Von GiFt-ZwErG im Forum Hosting & Webserver
    Antworten: 13
    Letzter Beitrag: 09.03.07, 20:35
  3. Antworten: 3
    Letzter Beitrag: 11.12.06, 13:24
  4. wie tab control?
    Von gs_iceman im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 11.09.06, 11:10
  5. Access Tab-Control in Tab-Control?
    Von emuume im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 16.10.05, 20:46