WindowsAPICodePack.Taskbar in DLL einbinden - Fehler

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    WindowsAPICodePack.Taskbar in DLL einbinden - Fehler

    Guten Tag

    Ich hab mal versucht die Funktionen aus dem Windows API Code Pack für die Taskbar in meine DLL reinzupacken, also Windows API Code Pack importieren und dann so Funktionen zu basteln. Jetzt ist mein Problem folgendes. Wenn ich dann meine DLL in ein Programm einbinde und versuche da was an der Taskbar mit diesen Funktionen einzustellen, kommt folgende Fehlermeldung:

    Quellcode

    1. A valid active Window is needed to update the Taskbar.



    Was muss ich machen, damit diese Fehlermeldung nicht mehr kommt?

    Vielen Dank im Voraus

    Breadsoft
    Hoffentlich bin ich nicht der Einzige, der die Windows API Code Pack nicht kennt.
    Offensichtlich benötigt Deine Taskbar ein gültiges Fenster-Handle, um zu funktionieren:

    VB.NET-Quellcode

    1. Dim handle As IntPtr = Me.Handle
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Breadsoft schrieb:

    warum hat eigentlich eine DLL kein Handle?
    Wenn Du Dich etwas mit API auskennst: Es wird ein hWnd gebraucht.
    Eine DLL ist (normalerweise) kein (aktives) Fenster, erst, wenn ein Fenster erstellt wird (z.B. mit New FormX) generiert das Betriebssystem in diesem Kontext das Handle.
    Wie sieht denn der komunizierende DLL-Code aus?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das is aus meiner DLL. Ich hoffe du meintest das. Das ist zum Setzen des Status der Progressbar in der Taskbar

    VB.NET-Quellcode

    1. ''' <summary> ''' Legt den Status der Progressbar in der Taskbar fest. ''' </summary> ''' <param name="State">Der gewünschte Status.</param> ''' <param name="Handle">Das Handle des Programms, welches diese Funktion ausführt.</param> ''' <returns></returns> ''' <remarks></remarks> Public Function SetProgressState(ByVal State As Desktop.TaskBarProgressState, ByVal Handle As IntPtr) As Boolean TaskbarMgr.SetProgressState(CType(State, TaskbarProgressBarState), Handle) Return True End Function


    Sorry, dass das nich richtig angezeigt wird ich hab keine ahnung was da los ist.

    Breadsoft schrieb:

    Das is aus meiner DLL.

    VB.NET-Quellcode

    1. Public Function SetProgressState(ByVal State As Desktop.TaskBarProgressState, ByVal Handle As IntPtr) As Boolean
    2. TaskbarMgr.SetProgressState(CType(State, TaskbarProgressBarState), Handle)
    3. Return True
    4. End Function
    Das musst Du dann eben aus Deinem Hauptfenster so aufrufen:

    VB.NET-Quellcode

    1. SetProgressState(Desktop.TaskBarProgressState.XXX, Me.Handle)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wo rufst du diese Funktion auf? Direkt bei _Load? InitializeComponent?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Breadsoft schrieb:

    Ich rufe das in einem Button_Click Event auf.
    Mit welchem Code?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    also ganz oben

    VB.NET-Quellcode

    1. Imports Computer.NET(Meine DLL)

    Dann als Deklaration

    VB.NET-Quellcode

    1. Public Taskbar As New Features.Taskbar 'Die Klasse in meiner DLL wo die Funktionen drin sind.

    und dann im Button_Click Event

    VB.NET-Quellcode

    1. SetProgressState(Desktop.TaskBarProgressState.Normal, Me.Handle)
    Was hat das Button-Klick-Event mit Deiner Taskbar zu tun?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da haste aber jetzt Codeschnipselchen gepostet, die dies absolut nicht zum Ausdruck bringen.
    Haste vielleicht ein paar zusammenhängende Snippets?
    Kannst Du die vielleicht nachvollziehbar in einem neuen Projekt (dass Du Dir nix kaputtmachst) in eine einzige Button_Click-Routine reinbauen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!