SysTray Icon ersetzen



  • Hallo,

    ich versuche seit Stunden krampfhaft das Windows-Icon für WLAN in der SysTray, durch ein anderes Symbol zu ersetzen.

    Hab mich schon durch die halbe MSDN gewühlt aber nichts gefunden.

    Ist das überhaupt möglich?

    Wäre froh, wenn mir da jemand helfen könnte.

    Danke im Voraus! 😃



  • Hallo

    das hat aber nichst mit dem Builder zu tun, also las dich verschieben, nach Rund um den PC

    bis bald
    akari



  • Natürlich hat es was damit zu tun ...

    a.) Programmiere ich mit Hilfe des Builders

    b.) Gibt es Win-API Befehle, mit denen es möglich ist Icons in der SysTray zu modifizieren, auszutauschen und hinzuzufügen.

    Das ist das was ich erfahren möchte, wie ich mit diesen Befehlen umzugehen habe.



  • Hallo

    Gibt es Win-API Befehle

    Genau, WinAPI-Funktionen. Keine VCL-Funktionen. Deshalb ist das nichts Builderspezifisches, ob du das dann in einem Builder-Projekt einsetzt oder nicht spielt keine Rolle.
    Deshalb solte das Thema zumindestens in WinAPI-Forum verschoben werden.
    Denn dort sind mit Sicherheit mehr Leute, die sowas wissen könnten.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in KlausB aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ja, theoretisch geht das. Jedes Icon dadrin wird durch ein Fenster-Handle und eine ID angesprochen.
    Wie man aber rückwirkend aus dem Systray das Handle und die ID für z.B. Icon Nr. 3 rauskitzelt, weiß ich nicht. Habs auch mal probiert, ich glaube nicht, dass es geht.
    Naja, also bleibt dir wahrscheinlich nur probieren übrig. Also alle Fenster mit EnumWindows auflisten und alle IDs durchprobieren. Falls das nicht Jahre dauert, sonst halt nur IDs von 0-100 oder so...
    Wenn dus gefunden hast, Fenstername, Fensterklasse und ID ausgeben lassen / aufschreiben. Dann dein Programm ummodeln, dass es nicht mehr alles durchprobiert, sondern nur das Fenster sucht (bzw. dessen Handle) und mit der ID das Icon verändern.

    Du könntest bei EnumWindows auch die Fenster rausfiltern, die aus der Instanz mit dem richtigen Exe-Dateinamen stammen (also aus der WLAN-Startup.exe oder so).

    Viel Spaß 😃



  • Badestrand schrieb:

    Ja, theoretisch geht das. Jedes Icon dadrin wird durch ein Fenster-Handle und eine ID angesprochen.
    Wie man aber rückwirkend aus dem Systray das Handle und die ID für z.B. Icon Nr. 3 rauskitzelt, weiß ich nicht. Habs auch mal probiert, ich glaube nicht, dass es geht.
    Naja, also bleibt dir wahrscheinlich nur probieren übrig. Also alle Fenster mit EnumWindows auflisten und alle IDs durchprobieren. Falls das nicht Jahre dauert, sonst halt nur IDs von 0-100 oder so...
    Wenn dus gefunden hast, Fenstername, Fensterklasse und ID ausgeben lassen / aufschreiben. Dann dein Programm ummodeln, dass es nicht mehr alles durchprobiert, sondern nur das Fenster sucht (bzw. dessen Handle) und mit der ID das Icon verändern.

    Du könntest bei EnumWindows auch die Fenster rausfiltern, die aus der Instanz mit dem richtigen Exe-Dateinamen stammen (also aus der WLAN-Startup.exe oder so).

    Viel Spaß 😃

    Nein, es ist ein Toolbar Window. Die Icons sind also keine Fenster und haben somit kein Handle.



  • Badestrand schrieb:

    Ja, theoretisch geht das. Jedes Icon dadrin wird durch ein Fenster-Handle[...]

    Nop dat sind keine Fenster...!

    EDIT: Zuuu späääät^^



  • Ja ja ja... Ich weiß dass es keine Fenster sind 🙄

    Aber die Icons im Systray kann man ja (nur?) mit

    WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid )
    

    ansprechen. Und um dort ein Icon zu identifizieren, muss man im Parameter pnid das Fenster-Handle und die ID angeben. Sonst kommt man an das Icon nicht ran. So meinte ich das 💡



  • Naja, ich hab es jetzt weniger elegant gelöst.

    xpsp2res.dll mit einem Res-Hacker geöffnet, die entsprechenden Icons ausgetauscht und anschließend durch die originale DLL ersetzt.

    Funktioniert einwandfrei, allerdings muss man die Systemwiederherstellung auschalten und die DLL-Datei im abgesicherten Modus ersetzen, da Windows sonst immer wieder die geänderte, mit der orginalen DLL überschreibt.

    Gruß
    rapi


Anmelden zum Antworten