Taskbar ausblenden

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von MB-Tech.

    Taskbar ausblenden

    Hey,

    Ich habe folgendes Problem...
    Ich kann meine Taskbar ausblenden (TopMost) muss allerdings noch
    weitere Programme per Process.Start ausführen.
    Wenn ich dies tue sind die ausgeführten Programme ja unter meiner Form...
    Gibt es eine Möglichkeit die Programme zu starten so das ich sie sehe
    und ohne die Windows Taskbar einzublenden?

    Viele Grüße
    Geht es nicht leichter als das:

    VB.NET-Quellcode

    1. Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function SetWindowPos Lib "user32" ( _ ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long Private Const SWP_SHOWWINDOW = &H40 Private Const SWP_HIDEWINDOW = &H80 ' Taskbar ausblenden Public Sub HideTaskbar() Dim hWnd As Long hWnd = FindWindow("Shell_TrayWnd", "") Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) End Sub ' Taskbar einblenden Public Sub ShowTaskbar() Dim hWnd As Long hWnd = FindWindow("Shell_TrayWnd", "") Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) End Sub


    Wie mache ich das denn wenn ich die Form close das dann die
    Taskbar eingeblendet wird und sobald ich sie starte sie wieder ausblendet wird?
    Das is blödsinn. Der Explorer is weit mehr als nur Taskbar. Ich würde es nicht machen zumal der sich eh immer wieder selbst startet.

    Du brauchst dort nur die API Deklaration und hast 2 Konstanten die du der Funktion ShowWindow übergeben musst.

    Wenn die wieder anzeigen willst machste einfach in das Close Event der Form den Code zum Anzeigen der Taskbar, also einfacherer gehts nun wirklich nicht.

    Du könntest natürlich meine Library nehmen [Release] DisablePro.NET die macht aber letztendlich auch nichts anders.
    Dazu bräuchte ich ja den Code ;) Und ich möchte dich ja
    nicht deswegen auspressen :D

    Ist das denn so richtig?

    VB.NET-Quellcode

    1. Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function SetWindowPos Lib "user32" ( _ ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long Private Const SWP_SHOWWINDOW = &H40 Private Const SWP_HIDEWINDOW = &H80 ' Taskbar ausblenden Public Sub HideTaskbar() Dim hWnd As Long hWnd = FindWindow("Shell_TrayWnd", "") Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) End Sub ' Taskbar einblenden Public Sub ShowTaskbar() Dim hWnd As Long hWnd = FindWindow("Shell_TrayWnd", "") Call SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) End Sub


    Keine Ahnung warum er die Formation nicht einhält
    Hierbei gehts auch nicht um die Taskbar, sondern was diese Funktionen machen. Es sind ja ja schließlich jeweils nur 2 Stück und selbst diese könnte man noch soweit optimieren, dass du zum Ausblende bzw. Anzeigen nur noch eine Funktion und somit nur eine Zeile benötigst.
    *ditsch*

    Der Code funktioniert, wenn man ihn richtig einfügt, du hast das anscheint nicht gemacht wenn er mäckert, deswegen wollte ich deinen JETZTIGEN Code sehen damit ich dir sagen kann was du falsch gemacht hast. Aber da du selbst dafür zu unfähig scheinst, steige ich hier jetzt aus!

    Hier mal eine Erklärung und nicht nur C&P

    Um die Taskbar auzublenden brauchst du zwei API´s. Wenn du nicht weißt, was eine API ist, dann lese jetzt nicht weiter, sondern informiere dich erst über das Thema.

    VB.NET-Quellcode

    1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _lpClassName As String, ByVal lpWindowName As String) As Long
    2. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx_ As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


    Mit der API FindWindow, ermittelst du ein Fensterhandle, anhand eines Fenstertitels. Das Handle brauchst du, um ein Fenster ansprechen zu können.

    Also suchen wir das Fensterhandle der Taskbar:

    VB.NET-Quellcode

    1. Dim taskbarHandle As IntPtr = FindWindow("Shell_traywnd", "")


    Da man normalerweise solche Werte wie "Shell_traywnd" nicht weiß, kann man diese im Internet nachschauen...

    Soweit so gut. Jetzt müssen wir natürlich noch die Taskbar ausblenden. Dafür haben wir noch eine API deklariert: SetWindowPos.
    Mit dieser ist es möglich Fenster anhand eines Fensterhandles beispielsweise zu verstecken oder zu zeigen. Natürlich geht damit noch mehr, aber wir wollen ja nur
    die Taskbar verstecken/zeigen.

    Die API verlangt allerdings Flags, damit sie weiß, was gemacht werden soll. Solche sind meistens als Const (Konstanten) bereits deklariert und liegen bei der Beschreibung der API bei.

    VB.NET-Quellcode

    1. Const SWP_HIDEWINDOW = &H80
    2. Const SWP_SHOWWINDOW = &H40



    Jetzt haben wir alle Vorbereitungen getroffen. Wir wissen das Fensterhandle der Taskbar und haben alles deklariert.
    Der Aufruf ist nun wie folgt:

    VB.NET-Quellcode

    1. 'Ausblenden
    2. SetWindowPos(taskbarHandle, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
    3. 'Einblenden
    4. SetWindowPos(taskbarHandle, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)


    Hier noch einmal zusammengefasst mit einer Funktion:

    VB.NET-Quellcode

    1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _lpClassName As String, ByVal lpWindowName As String) As Long
    2. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx_ As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    3. Const SWP_HIDEWINDOW = &H80
    4. Const SWP_SHOWWINDOW = &H40
    5. Sub TaskbarVisibility(ByVal visible As Boolean)
    6. 'Fensterhandle der Tasbar ermitteln
    7. Dim taskbarHandle As IntPtr = FindWindow("Shell_traywnd", "")
    8. Select Case visible
    9. Case True
    10. 'Taskbar sichtbar -> Einblenden
    11. SetWindowPos(taskbarHandle, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)
    12. Case False
    13. 'Taskbar unsichtbar -> Ausblenden
    14. SetWindowPos(taskbarHandle, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
    15. Case Else
    16. End Select
    17. End Sub


    Aufruf der Funktion:

    VB.NET-Quellcode

    1. 'Taskbar Sichtbar
    2. TaskbarVisibility(True)
    3. 'Taskbar Unsichtbar
    4. TaskbarVisibility(False)


    Ich hoffe geholfen zu haben. Wichtig ist, das du diesen Beitrag nicht als C&P verwendest, sondern daraus lernst und das fragst, was du nicht verstehst.

    LG

    MB-Tech

    Dodo schrieb:

    Das ist aber keine saubere Lösung, da schießt man mit Kanonenkugeln auf Spatzen.

    Ist aber nich zu meinem Beitrag gemeint oder? Eher zu dem über mir :rolleyes:

    LG