Neues Bitmap für Start Button



  • Scheiße! Ich kann mich erinnern, dass jemand das mal gemacht hat und ein kleines Proggi draus gemacht hat. Ich hatte geglaubt, das wäre geeky oder Luckie gewesen. Aber die haben sowas nicht auf ihren HPs. Ich bekomme das schon hin, mit BM_SETIMAGE dem Startbutton ein neues Bitmap zuzuweisen, aber das geht spätestens beim nächsten Drücken auf den Button wieder weg. Wie schaffe ich es, dass es immer dableibt?



  • Mittels Hooking und SubClassing sollte das auf jeden Fall gehen.



  • Man kann fremde Fenster nicht subclassen!!! Und ich kann mich erinnern, dass das erwähnte Proggi recht einfach war. Also ohne Hooks.



  • ja war gaaaaaaaaaaaaaanz einfach.

    aber für ein spatzenhirn wie dich zu schwierig!!!!!!!!!!!



  • Schön, dass du bei dem Spatzenhirn auf der HP warst. 😃



  • Original erstellt von WebFritzi:
    Man kann fremde Fenster nicht subclassen!!!

    Warum nicht?



  • Das geht dann doch irgendwie mit ner Dll und Hooks, oder?

    cya & guten Rutsch 🙂



  • Ist auch egal, denn hier geht es nicht um Subclassing. Wie gesagt, ich gebe dem Button ein neues Bitmap. Das klappt. Nur leider aktualisiert der Explorer in (un-)regelmäßigen Abständen die Taskleiste (wobei es sich um maximal ne halbe Sekunde handelt). Und damit auch den Start Button. D.h., das Bild verschwindet nach einer kleinen Weile wieder. Dann ist kein Bitmap mehr auf dem Button.
    Ich frage mich nur, was dafür zuständig ist, dass normalerweise bei Aktualisierung der Taskleiste das Standardbild auf dem Button bleibt.



  • Hab da was gefunden, vielleicht hilft's ja:

    ...
    tatsächlich ist der Startbutton ein Bitmap-Button. Aber mittels der "GetDC"-Funktion kannst du den Devicekontext ermitteln und anschliessend über die "SelectObject"-Funktion ein neues Bitmap (Bitmaphandle) zuweisen. Vergiss aber nicht danach die "ReleaseDC"-Funktion aufzurufen 😉
    ...

    cya 🙂



  • WOW. Danke, das war's! Man muss erstens das Bitmap per BM_SETIMAGE ändern und damit es bestehen bleibt SelectObject() benutzen.

    Danke @MagiC. Hast mir sehr geholfen.



  • Hmm. Soweit so gut. Jetzt möchte ich aber noch, dass das Bitmap auch nach dem Ende meines Proggis noch auf dem Button zu sehen ist. Das tut es aber nicht, weil das HBITMAP sich ja in meinem Speicher befindet. Ich muss also irgendwie das Bitmap in den Speicher der Explorer.exe hauen und darauf zugreifen können. Nur wie?



  • Wenn dein Proggi nicht allzu speicherfressend ist, könntest du es ja einfach im Hintergrund weiterlaufen lassen :).

    cya 🙂



  • Ja, aber das will ich nicht.



  • Dann kannst du auch gleich mit einem Resourceneditor das Bitmap in der Explorer.exe ändern. Dann brauchst du kein Programm mehr und das Bitmap ist auch nach einem Neustart noch da.



  • @D@niel $chumann
    wie macht man das? *auch intressiert bin*



  • Es gibt da so Tools, ich glaub eins heisst "ResouceHack" oder so. Damit kannst du die Resourcen, die einer Anwendung beigefügt sind, verändern.

    cya 🙂



  • Original erstellt von D@niel $chumann:
    Dann kannst du auch gleich mit einem Resourceneditor das Bitmap in der Explorer.exe ändern. Dann brauchst du kein Programm mehr und das Bitmap ist auch nach einem Neustart noch da.

    Nein, bei mir leider nicht! Ich hab das Bitmap geändert, aber es war keine Änderung zu sehen. Die Änderung des Textes hat geklappt und alle anderen (Startmenu usw.) - nur eben die des Bitmaps nicht. Frag mich nicht warum. Ich hab genau das gleiche Format genommen (16x16 und 16 Farben).
    Deshalb kam ich ja erst auf die Idee, das mit einem Proggi zu machen.



  • Auf der Seite http://csislabs.palomar.edu/Student/Utilities/ResHack/ gibt es einen guten Resourcen Editor.



  • Also so ein Aufwand ist das doch wirklich nicht mittels HOOKING
    die WM_PAINT Proc vom Startbutton umzubiegen..

    Wenn es jemanden interessiert packe ich das mal auf unsere HP.
    Anträge dazu bitte bei uns ins Forum posten. 😃



  • Ja, bitte machen! Das ist dann mal wieder ne Gelegenheit für mich, das Hooking auch mal zu verstehen :D.

    cya 🙂


Log in to reply