wie kriege ich mein Icon in die Titelliste und in die Taskbar?



  • Hai,

    habe hier manchen Thread gelesen, bei dem es darum ging, das Programm , wenn das Konsolenwindow ge'hide't wird, auch aus dem Taskmanager und der Taskbar verschwinden zu lassen ||-). Au Backe, so Probleme hätte ich auch gern. Meins ist genau anders rum und ich hoffe, hier der Erleuchtung näher zu kommen:

    Hab nen Telnetserver, der läuft als Applikation auf nem Server, dauernd. er dient letztendlich zum managen von Netzwerkknoten wie Switche, was dann aber via snmp gemacht wird.

    Das mit dem verschwindenlassen der Konsole geht prima, aber ...

    1. die Anwendung ist im Taskmanager unter win2k nur noch unter 'Prozesse' sichtbar, leider nicht mehr unter 'Anwendungen'. Kann man das ändern? Wenn ich das Konsolenfenster nicht 'verstecke', dann ist die Anwendung nämlich auch unter 'Anwendungen' sichtbar.

    2. Ich hätte gern das Icon in der Symbolleiste ganz rechts unten aufm Bildschirm (wo z.B. auch das Netzwerk oder Lautsprechersymbol sichtbar ist), wenn die Konsole versteckt wird. Beim Klick auf mein Icon möchte ich dann die
    Konsole wieder sichtbar machen. Wie könnte ich dies bewerkstelligen? Notfalls würde auch ein Symbol an anderer Stelle auf dem Bildschirm okay sein. Wäre mir angenehmer als die 'Keyboard-Lösung', die hier in den Threads beschrieben wurde.

    3. habe eine resource eingebunden mit einem Icon, da wurde auch ein Bezeichner 'IDI_MYICON' mit dem Wert 101 definiert, aber wenn ich mit
    LoadIcon(0, IDI_MYICON) versuche, das Ding einzubinden, bekomme ich die Fehlermeldung 'error C2065 .. nichtdeklarierter Bezeichner', in den Einstellungen habe ich nachgeschaut, da wird das Resourcenskript eingebunden.
    Was habe ich möglicherweise vergessen oder falsch gemacht?

    Verwende ms-vc++6.
    So das war jetzt 'nen Roman, hoffe ich konnte die Knackpunkte präzise genug rüberbringen und einer von euch 'Out There' kann mir Weiterhelfen.
    schon mal ein Danke von
    arni



  • Ich hab mal einen Code dafür geschrieben (VC++)
    Du musst warscheinlich ein virtuelles Fenster erzeugen das
    die Nachrichten annimmt:

    //*****************************************************************************
    //*
    //*
    //*     TaskbarTools
    //*
    //*
    //*****************************************************************************
    //
    //  Funktionen für die Steuerung der Taskbar
    //
    //      BOOL    TaskbarHide(HWND Hwnd)      Taste in der Taskbar verstecken
    //      BOOL    TaskbarShow(HWND Hwnd)      Taste in der Taskbar anzeigen
    //
    //  Nachrichten Verarbeitung:
    //
    //      ON_MESSAGE(TB_NOTIFYICON, OnProc)
    //
    //      void OnProc(UINT wParam,UINT lParam)    // lParam ist die ID
    //          {
    //          switch(lParam)
    //              {
    //          case WM_LBUTTONDOWN:
    //          case WM_RBUTTONDOWN:
    //              }
    //          }
    
    #ifndef     __TASKBARTOOLS_H__
    #define     __TASKBARTOOLS_H__
    
    #define     TB_NOTIFYICON       0x2F19
    
                BOOL         TaskbarInit();
                void __cdecl TaskbarExit(void);
    
                BOOL TaskbarHide(HWND Hwnd);
                BOOL TaskbarShow(HWND Hwnd);
    
                BOOL TaskbarIconSet(HWND Hwnd,HICON  Icon,LPCSTR Text=0,UINT Id=0);
                BOOL TaskbarIconSet(HWND Hwnd,LPCSTR Icon,LPCSTR Text=0,UINT Id=0);
        inline  BOOL TaskbarIconSet(HWND Hwnd,UINT   Icon,LPCSTR Text=0,UINT Id=0){return TaskbarIconSet(Hwnd,MAKEINTRESOURCE(Icon),Text,Id);}
    
                BOOL TaskbarIconAdd(HWND Hwnd,HICON  Icon,LPCSTR Text=0,UINT Id=0);
                BOOL TaskbarIconAdd(HWND Hwnd,LPCSTR Icon,LPCSTR Text=0,UINT Id=0);
        inline  BOOL TaskbarIconAdd(HWND Hwnd,UINT   Icon,LPCSTR Text=0,UINT Id=0){return TaskbarIconAdd(Hwnd,MAKEINTRESOURCE(Icon),Text,Id);}
    
                BOOL TaskbarIconDel(HWND Hwnd,                          UINT Id=0);
    
    #endif
    
    //*****************************************************************************
    //*
    //*
    //*     TaskbarTools
    //*
    //*
    //*****************************************************************************
    //
    //  Funktionen für die Steuerung der Taskbar
    //
    //      BOOL    TaskbarHide(HWND Hwnd)      Taste in der Taskbar verstecken
    //      BOOL    TaskbarShow(HWND Hwnd)      Taste in der Taskbar anzeigen
    //
    //  Nachrichten Verarbeitung:
    //
    //      ON_MESSAGE(TB_NOTIFYICON, OnProc)
    //
    //      void OnProc(UINT wParam,UINT lParam)    // lParam ist die ID
    //          {
    //          switch(lParam)
    //              {
    //          case WM_LBUTTONDOWN:
    //          case WM_RBUTTONDOWN:
    //              }
    //          }
    
    #include    <windows.h>
    #include    <shellapi.h>
    #include    <shlwapi.h>
    #include    <shlobj.h>
    #include    <string.h>
    #include    "TaskbarTools.h"
    
    typedef struct ITaskbarListVtbl
        {
        BEGIN_INTERFACE
    
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( VOID __RPC_FAR * This,REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject);
        ULONG   ( STDMETHODCALLTYPE __RPC_FAR *AddRef         )( VOID __RPC_FAR * This);
        ULONG   ( STDMETHODCALLTYPE __RPC_FAR *Release        )( VOID __RPC_FAR * This);
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *HrInit         )( VOID __RPC_FAR * This);
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddTab         )( VOID __RPC_FAR * This, HWND hwnd);
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *DeleteTab      )( VOID __RPC_FAR * This, HWND hwnd);
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ActivateTab    )( VOID __RPC_FAR * This, HWND hwnd);
        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetActiveAlt   )( VOID __RPC_FAR * This, HWND hwnd);
    
        END_INTERFACE
        } ITaskbarListVtbl;
    
    typedef struct
        {
        ITaskbarListVtbl    *lpVtbl;
        }ITaskbarList_;
    
    static  ITaskbarList_   *list=0;
    static  int exit_add=0;
    
    //*****************************************************************************
    //*
    //*     TaskbarInit
    //*
    //*****************************************************************************
    //  Initialisiert die Taskbar Routienen
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarInit()
    {
    HRESULT hr;
    
        if(list)return TRUE;
    
        hr=CoInitialize( NULL );
        if(!SUCCEEDED(hr))return FALSE;
    
        hr=CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&list);
        if(!SUCCEEDED(hr))return FALSE;
    
    return TRUE;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarExit
    //*
    //*****************************************************************************
    //  Deinitialisiert die Taskbar Routienen
    void __cdecl TaskbarExit(void )
    {
        if(!list)return;
    
        CoUninitialize();
        list=0;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarHide
    //*
    //*****************************************************************************
    //  Versteckt die Taskleiste die zu Hwnd gehört
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarHide(HWND Hwnd)
    {
    HRESULT hr;
    
        if(!list)
            {
            if(!TaskbarInit())return FALSE;
            if(!exit_add){atexit(TaskbarExit);exit_add=1;}
            }
    
        hr=list->lpVtbl->DeleteTab(list,Hwnd);
        if(!SUCCEEDED(hr))return FALSE;
    
    return TRUE;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarShow
    //*
    //*****************************************************************************
    //  Erstellt eine Taste in der Taskleiste die zu Hwnd gehört
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarShow(HWND Hwnd)
    {
    HRESULT hr;
    
        if(!list)
            {
            if(!TaskbarInit())return FALSE;
            if(!exit_add){atexit(TaskbarExit);exit_add=1;}
            }
        hr=list->lpVtbl->AddTab(list,Hwnd);
        hr=list->lpVtbl->ActivateTab(list,Hwnd);
        if(!SUCCEEDED(hr))return FALSE;
    
    return TRUE;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarIconSet
    //*
    //*****************************************************************************
    //  Ändert das Icon der in der Taskbar
    //  Hwnd    : Handle vom Hauptfenster
    //  Icon    : Resourcen Name für Icon
    //  Text    : Text der über Icon eingeblendet wird
    //            Ist Text gleich Null, so wird der Icontext nicht verändert
    //  Id      : User Id
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarIconSet(HWND Hwnd, HICON Icon, LPCSTR Text, UINT Id)
    {
    BOOL            ok;
    NOTIFYICONDATA  tnd;
    
        tnd.cbSize          = sizeof(NOTIFYICONDATA);
        tnd.hWnd            = Hwnd;
        tnd.uID             = Id;
        tnd.uFlags          = NIF_MESSAGE|NIF_ICON;
        tnd.uCallbackMessage= TB_NOTIFYICON;
        tnd.hIcon           = Icon;
    
        if(Text)
            {
            tnd.uFlags |= NIF_TIP;
            strncpy(tnd.szTip, Text, sizeof(tnd.szTip));
            }
        else{
            tnd.szTip[0] = '\0';
            }
    
        ok = Shell_NotifyIcon(NIM_MODIFY,&tnd);
    
    return ok;
    }
    
    BOOL TaskbarIconSet(HWND Hwnd, LPCSTR Icon, LPCSTR Text, UINT Id)
    {
    HICON   hicon;
    BOOL    ok;
    
        hicon=(HICON)LoadImage(GetModuleHandle(NULL), Icon , IMAGE_ICON, 16, 16, 0);
        ok=TaskbarIconSet(Hwnd,hicon,Text,Id);
        if(hicon)DestroyIcon(hicon);
    
    return ok;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarIconAdd
    //*
    //*****************************************************************************
    //  Fügt ein Icon in die Taskbar ein
    //  Hwnd    : Handle vom Hauptfenster
    //  Icon    : Resourcen Name für Icon
    //  Text    : Text der über Icon eingeblendet wird
    //            Ist Text gleich Null, so wird der Icontext nicht verändert
    //  Id      : User Id
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarIconAdd(HWND Hwnd, HICON Icon, LPCSTR Text, UINT Id)
    {
    BOOL            ok;
    NOTIFYICONDATA  tnd;
    
        tnd.cbSize          = sizeof(NOTIFYICONDATA);
        tnd.hWnd            = Hwnd;
        tnd.uID             = Id;
        tnd.uFlags          = NIF_MESSAGE|NIF_ICON;
        tnd.uCallbackMessage= TB_NOTIFYICON;
        tnd.hIcon           = Icon;
    
        if(Text)
            {
            tnd.uFlags |= NIF_TIP;
            strncpy(tnd.szTip, Text, sizeof(tnd.szTip));
            }
        else{
            tnd.szTip[0] = '\0';
            }
    
        ok = Shell_NotifyIcon(NIM_ADD,&tnd);
    
    return ok;
    }
    
    BOOL TaskbarIconAdd(HWND Hwnd, LPCSTR Icon, LPCSTR Text, UINT Id)
    {
    HICON   hicon;
    BOOL    ok;
    
        hicon=(HICON)LoadImage(GetModuleHandle(NULL), Icon , IMAGE_ICON, 16, 16, 0);
        ok=TaskbarIconAdd(Hwnd,hicon,Text,Id);
        if(hicon)DestroyIcon(hicon);
    
    return ok;
    }
    
    //*****************************************************************************
    //*
    //*     TaskbarIconDel
    //*
    //*****************************************************************************
    //  Entfernd ein Icon aus der Taskbar
    //  Hwnd    : Handle vom Hauptfenster
    //  Id      : User Id
    //  Ergibt TRUE wenn erfolgreich
    BOOL TaskbarIconDel(HWND Hwnd,UINT Id)
    {
    BOOL            ok;
    NOTIFYICONDATA  tnd;
    
        tnd.cbSize          = sizeof(NOTIFYICONDATA);
        tnd.hWnd            = Hwnd;
        tnd.uID             = Id;
        tnd.uFlags          = NIF_MESSAGE|NIF_ICON;
        tnd.uCallbackMessage= TB_NOTIFYICON;
        tnd.hIcon           = 0;
        tnd.szTip[0]        = '\0';
    
        ok = Shell_NotifyIcon(NIM_DELETE,&tnd);
    
    return ok;
    }
    

    Meine Webseite:

    http://members.inode.at/anton.zechner/az/index.html


Anmelden zum Antworten