plz help: SystemTray und co.



  • HI!

    Ich bin an der Entwicklung einer Windows Shell (desktop + filemanager)
    -> members.fortunecity.de/scops

    mir fehlt allerdings eine doku über den systemtray den ich mit in meine shell einbinden will.

    Weiß jemand wie ich den Systemtray nachbauen kann?

    MfG
    scops



  • //Unter die #include´s:
    void tray();
    NOTIFYICONDATA nidTrayIcon;
    
    //Am ende des Programmes:
    void tray()
    {
       nidTrayIcon.cbSize = sizeof(nidTrayIcon);
       nidTrayIcon.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
       nidTrayIcon.hWnd = hwnd;
       nidTrayIcon.uCallbackMessage = (WM_USER + 1);
       nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
       nidTrayIcon.uID = 0x0200;
       lstrcpyn(nidTrayIcon.szTip,"Tray!",sizeof(nidTrayIcon.szTip));
       Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);
       ShowWindow(hwnd,SW_HIDE);
    } 
    //Start mit: tray();
    

    Sollte funktionieren.

    MFG

    ReneS



  • hi!

    Danke für deine antwort!
    aber irgendwie geht garnix.
    hab im BCB nen neues Projekt erstellt und den code reingebaut.

    compiler errors:
    [C++ Fehler] main.cpp(453): E2451 Undefiniertes Symbol 'hInst'
    [C++ Fehler] main.cpp(453): E2451 Undefiniertes Symbol 'IDI_ICON1'
    [C++ Fehler] main.cpp(454): E2451 Undefiniertes Symbol 'hwnd'

    wo deklariere ich die 3?

    MfG
    scops



  • hInst ist die Instance deiner Anwendung, bekommts du über GetModuleHandle(0); oder über die WinMain direkt.

    Das andere ist der Icon aus der Resource, der angezeigt werden soll

    Und das dritte ist das Handle deines Fensters...

    cu para
    😃



  • Danke für die erklärung 🙂

    nur wie bau ichs ein? *G*

    sorry bin relativ neu bei c++ 😉

    cya
    scops



  • Zeig mal deinen kompletten Code her!



  • nun der code wär z.B. nen leeres BCB projekt:

    //---------------------------------------------------------------------------

    #include <vcl.h>
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------

    mit eingefügtem code:

    //---------------------------------------------------------------------------

    #include <vcl.h>
    void tray();
    NOTIFYICONDATA nidTrayIcon;
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    tray();
    }
    //---------------------------------------------------------------------------

    void tray()
    {
    nidTrayIcon.cbSize = sizeof(nidTrayIcon);
    nidTrayIcon.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
    nidTrayIcon.hWnd = hwnd;
    nidTrayIcon.uCallbackMessage = (WM_USER + 1);
    nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nidTrayIcon.uID = 0x0200;
    lstrcpyn(nidTrayIcon.szTip,"Tray!",sizeof(nidTrayIcon.szTip));
    Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);
    ShowWindow(hwnd,SW_HIDE);
    }

    was muss ich jetz adden, das der mir die trayicons in das fenster malt?
    oder in nen Panel... egal 🙂

    danke

    scops



  • Mit der geposteten Funktion wird lediglich ein Icon in das Windows-SysTray hinzugefügt (und anschließend das eigene Fenster versteckt).
    So wie ich das lese, willst du aber nicht ein Icon ins SysTray eintragen, sodern ein eigenes SysTray programmieren, in das andere Programme ihr Icon eintragen.
    Wie das dann geht kann ich dir aber auch nicht sagen.



  • genau daniel 🙂

    jo hoffe nur jemand weiß es bzw. weiß wos ne doku gibt wie das geht...
    gibt je etliche Shells die nen eigenen systray haben... also muss ja irgendwo stehn wie das geht... leider werde ich als relativer neuling (3 monate) bei c++ nich ganz schlau aus dem code dieser shells....

    cya
    scops


Anmelden zum Antworten