?
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