Taskbar Icon

Hi Experter,
wie kann ich rechtsunten im Taskbar ein Icon erzeugen, wärehnd ein Program von mir laufen.
Bei sdk gibts eine funktion MyTaskBarAddIcon(HWND, UNIT, HICON, LPSTR), weis aber nicht wie ich es aufrufen oder killen dieser Icon, die ganze parameter kenne ich nicht. Kann mir da jemand helfen?

Hallo,

Bei sdk gibts eine funktion MyTaskBarAddIcon(HWND, UNIT,
HICON, LPSTR), weis aber nicht wie ich es aufrufen oder killen
dieser Icon, die ganze parameter kenne ich nicht. Kann mir da
jemand helfen?

Es gibt keine Funktion, die so heißt, das ist nur ein Beispiel :smile:

wie kann ich rechtsunten im Taskbar ein Icon erzeugen, wärehnd
ein Program von mir laufen.

Dagegen gibts eine Funktion mit dem Namen ‚Shell_NotifyIcon‘ ( http://msdn.microsoft.com/library/default.asp?url=/l… ), welche für solche Icons zuständig ist.

Beispiel:

NOTIFYICONDATA iconData;
iconData.cbSize = sizeof(NOTIFYICONDATA); // Wer c mag … ich finds doof :wink:
iconData.hWnd = meinFensterHandle; // in MFC wohl this->GetSafeHWND()
iconData.uID = WM_MEINICONHANDLER; // Noch definieren!
iconData.uFlags = NIF_ICON | NIF_TIP; // Icon + Tooltip
iconData.hIcon = meinIcon; // Auch definieren
lstrcpy(iconData.szTip, _T(„Ich bin ein Tooltip“));

Shell_NotifyIcon(NIM_ADD, &iconData); // Setzt das icon rein

Beim Programmende nicht vergessen, es rauszunehmen, sonst bleibts da!
Shell_NotifyIcon(NIM_DELETE, &iconData);

Und falls du was ändern willst (z.b. ein Balloon unter xp anzeigen):
Shell_NotifyIcon(NIM_MODIFY, &iconData);

bye,
Christoph

Hi Christoph,
ich könnte jetzt dieser Icon erzeugt und anzeigen lassen.

Im Hilfe ist für dieser Objekt ein eigenschaft szInfo beschrieben
#include
NOTIFYICONDATA iconData;
iconData.szInfo

Es existiert aber nicht in mein Objekt, was stimmt da eigentlich nicht?

Hi,

Im Hilfe ist für dieser Objekt ein eigenschaft szInfo
beschrieben
#include
NOTIFYICONDATA iconData;
iconData.szInfo

Es existiert aber nicht in mein Objekt, was stimmt da
eigentlich nicht?

Steht doch auch in der MSDN :wink:

Note that several members of this structure are only supported for Shell32.dll versions 5.0 and later. To enable these members, include one of the following in your header:

#define _WIN32_IE 0x0500
#define _WIN32_IE 0x0600 // Eher des hier nehmen

bye
Christoph

Hi Christoph,
Ich glaube ich habs, shell32.dll auf mein NT hat den Version 4.0
ich tauscht mal die mit der von XP. hahaha,
man kann leider nicht so einfach shell32.dll tauschen.
Ich glaube für nt existiert gar kein „patch“, shell32 auf version 5.0 update.

Stimmt meiner vermutung wegen der shell32.dll version?
8meine englisch ist eben nicht so gut)

Hi,

Ich glaube ich habs, shell32.dll auf mein NT hat den Version
4.0
ich tauscht mal die mit der von XP. hahaha,
man kann leider nicht so einfach shell32.dll tauschen.
Ich glaube für nt existiert gar kein „patch“, shell32 auf
version 5.0 update.

Stimmt meiner vermutung wegen der shell32.dll version?
8meine englisch ist eben nicht so gut)

Ja, du kannst das nicht Updaten. Da Windows NT 4.0 sowieso nicht gerade Fehlerfrei ist, würde ich dir ein Update auf Windows 2000/XP/2003 Professional raten.

bye,
Christoph

Hi Christoph,
irgend wie klapps es nicht.

ich habe jetzt MS Visual Studio 6.0 auf ein XP installiert.
shell32.dll hat version 6.0
jetzt sollte ja eigentlich alles laufen, tut aber nicht.

  1. Beim Compilieren existiert dieser Eigentschaft .szInfo immer noch nicht.
  2. und ein neues Problem ist aufgetretten. Wenn ich mit dem Maus über dieser Taskbaricon zeigen, verschwindet es wieder.

zu 1: Ms VSt 6.0 reicht nicht für eigentschalft szInfo?
zu 2: habe ich irgendeiner Flag nicht richtig gesetzt?

Hallo,

ich habe jetzt MS Visual Studio 6.0 auf ein XP installiert.
shell32.dll hat version 6.0
jetzt sollte ja eigentlich alles laufen, tut aber nicht.

Nein, ein Betriebssystemwechsel reicht nicht ganz (siehe unten).

  1. Beim Compilieren existiert dieser Eigentschaft .szInfo
    immer noch nicht.
    zu 1: Ms VSt 6.0 reicht nicht für eigentschalft szInfo?

Das stimmt allerdings, dazu sind auch zwei Dinge nötig:

  • Entweder du besorgst dir ein neueres Visual C++ (.NET 2002/2003)
  • oder du versuchst dir ein aktuelles Platform SDK (gibts bei
    Microsoft MSDN), welches hoffentlich noch mit der 6.0er Version
    geht.
  • Du musst natürlich noch die Defines, die in meinem letzten Post
    stehen setzen :smile:
  1. und ein neues Problem ist aufgetretten. Wenn ich mit dem
    Maus über dieser Taskbaricon zeigen, verschwindet es wieder.
    zu 2: habe ich irgendeiner Flag nicht richtig gesetzt?

Wenn du mit MFC arbeitest, setze das NOTIFYICONDATA als Member-Variable der Application-Klasse ein und verwende NIM_ADD bei InitInstance() und NIM_DEL bei ExitInstance().

Falls du die Api (ohne Klassen) benutzt, mach das selbe einfach über eine globale Variable in WM_CREATE und WM_DESTROY deines Fensters.

bye,
Christoph