Icon dynamisch ändern



  • Swordfish schrieb:

    Windows (der Explorer) nimmt iirc das Icon mit der niedrigsten ID ...

    das weiß ich, allerdings muss ich compilieren um das ergebnis zu bekommen, das möchte ich nicht!





  • hmm danke das müsste man probieren diese funktion einzusetzen jedesmal wenn das programm gestartet wird, weil dann würde sich das icon zumindest beim programmstart ändern... aber ich bibn mir nicht sicher welchen data type ich nehmen soll



  • also so richtig weiß ich nicht wie ich die funktion einsetzen soll...
    habs geschafft mein ganzen programm zu crashes und es startet nicht mal mehr wenn ich die funktion auskommentiere

    HANDLE test = BeginUpdateResource(_T("dasicon.ico"), 0);
    UpdateResource(test,RT_ICON, _T("dasicon.ico"), LANG_NEUTRAL,_T("dasicon.ico"), 0);
    

  • Mod

    Swordfish schrieb:

    UpdateResource()?

    Keine guteIdee in Zeiten von UAC...



  • funktioniert das überhaupt?

    es geht darum ich hab ein programm gschrieben von dem es verschiedene versionen gibt.

    eine blaue, eine rote, und eine gelbe.

    der einzige unterschied ist der name, eine andere dll wird geladen und eben das icon.

    ich will jetzt aber nicht jedesmal das icon ändern und dann compilieren sonder das icon der .exe welches im windows explorer angezeigt wird soll eben auch von einer datei geladen werden die in der gleichen ebene wie die .exe liegt.


  • Mod

    Dann lass, das doch durch den Installer machen. Du kannst das Icon für eine Verknüpfung ja selbst bestimmen.

    Ansonsten hast Du da keine Chance... Die Exe wird immer das Icon bebkommen, dass der Explorer in der exe als erstes findet.

    Nachrag: Oder bau einen Bootstraper, der immer variiert und immer die gleiche Core-DLL benutzt.



  • wie kann ich das durch den installer machen? ich benutze den nsi installer. mir ist da nichts bekannt wie ich das icon der exe ändern soll.



  • Martin Richter schrieb:

    Swordfish schrieb:

    UpdateResource()?

    Keine guteIdee in Zeiten von UAC...

    Steh' g'rad auf der Leitung?


  • Mod

    Eine EXE befindet sich normlerweise in enem Verzeichnis das Schreibgeschützt ist!
    Zudem hat selbst ein Admin user keine Rechte auf das C:\Programme Verzeichnis, außer das Programm läuft elevated.

    Wir soll da bitte UpdateResource funktionieren?
    Alles was eine Exe beim "Kunden" modifiziert ist keine gute Idee.

    Weiterhin würde es eine bestehende Signatur zerstören. Wie sollte man also z.B, einen "Windows compatible" Test bestehen?

    Für "Mickeymaus-Programme-Programmierer" mag das wurscht sein. Mir wäre es das nicht... 😉



  • Danke, machte eben einen Seitwärtsschritt 😉



  • hmm heißt das jetzt ich habe keine chance das zu ändern? bei der installation vielleicht? habe aber bei nsis nix dazu gefunden.

    UpdateResource geht eh nicht da:

    lpData [in, optional]
    Type: LPVOID

    The resource data to be inserted into the file indicated by hUpdate. If the resource is one of the predefined types, the data must be valid and properly aligned. Note that this is the raw binary data to be stored in the file indicated by hUpdate, not the data provided by LoadIcon, LoadString, or other resource-specific load functions. All data containing strings or text must be in Unicode format. lpData must not point to ANSI data.

    Aber würde mich über hilfe dennoch sehr sehr freuen denn irgendwie muss das doch zu machen sein?!?



  • dynamic schrieb:

    UpdateResource geht eh nicht da:

    Geht nicht, da keine Zugriffsrechte, wie Martin klargestellt hat. Die Daten würde man eben nicht mit LoadIcon() sondern durch stinknormales binäres Dateieinlesen holen ...



  • aber das muss doch irgendwie anderst gehen?



  • hmm ok, wenn ich das so akzeptieren müsste dann ok

    kann ich aber das icon das in der taskbar erscheint zur laufzeit ändern? weil hier nimmt er auch das icon der exe...



  • mag mir keiner mehr helfen?


  • Mod

    dynamic schrieb:

    hmm ok, wenn ich das so akzeptieren müsste dann ok

    kann ich aber das icon das in der taskbar erscheint zur laufzeit ändern? weil hier nimmt er auch das icon der exe...

    Da entscheidet doch auch ein Stück Software das Du geschrieben hast über die ID, die genommen wird.
    Bei dem Icon der Exe im Explorer ist es immer das erste....

    Du benötigst drei EXE.

    Wenn es Dir genügt einen angepassten Link zu erzeugen, dann kann das der Installer. Dort kannst Du über die Icons frei entscheiden. Im Expolrer steht immer noch das erste Icon...

    Schreibe 3 verschiedene Lader, die sich in der Exe und im Icon unterscheiden...
    Lagere die Hauptanwendiung in eine DLL aus, oder zweite EXE die dann gestartet wird.



  • hallo nochmal und danke für deine antwort...

    sehe ich das jetzt also richtig, dass die exe sowie in der windows taskbar (nicht systemtray) das icon von der exe selbst genommen wird mit der niedrigsten id?

    d.h. ich kann das icon in der taskbar nicht so ändern wie mit der Shell_NotifyIcon function im Systemtray?



  • und es tut mir leid ich hab deinen beitrag jetzt 10 mal gelesen, ich verstehe ihn irgendwie nicht 🙂

    Da entscheidet doch auch ein Stück Software das Du geschrieben hast über die ID, die genommen wird.
    

    ich hab doch nirgens gesagt welche id er in der taskbarhaben will...
    ich hätte gern das mit loadimage() gemacht, aber das scheint ja nicht zu gehen?


  • Mod

    Ich habe Taskbar mit Systemtray verwechselt...


Anmelden zum Antworten