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: