2009-09-11 5 views
7

J'ai écrit un programme qui peint le widget sur le papier peint du bureau, sous les icônes du bureau, et tout était bon. Mais je révèle un bug étrange - mon programme ne fonctionnait pas sur d'autres ordinateurs - ils affichent le même bureau sans widget après le démarrage.dessin sous les icônes sur le bureau

Alors, y a-t-il des expiriences, des connaissances dans ce domaine? Aidez-moi, s'il vous plaît! :)

(je ne trouve aucun ordinateur près, où un widget pas des œuvres, dans mon ordinateur tout fonctionne bien. j'ai écrit beaucoup de programmes de test, dont les essais tirer quoi que ce soit sur le bureau avec plutôt des méthodes, mais le test affiche rien de trop dans mes ordinateurs amis)

méthode de dessin:.

J'ai écrit une dll, qui trouve la fenêtre de bureau (enfant progman-> Enfant->)) et crée un crochet et installer propre procédure de fenêtre bureau. Dans la procédure de fenêtre i crochet WM_ERASEBKGND:

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

// Je saute dans ce code obtenir et définir des zones de découpage pour le dessin rapide. (J'ai essayé toutes les combinaisons avec écrêtage et sans écrêtage)

Et dans les tests j'essaie aussi de peindre le widget dans le message WM_PAINT avec les mêmes résultats - tout fonctionne déjà chez moi, mais ne fonctionne pas du tout mes amis.

upd: Je l'ai résolu! :)

+0

Votre code fonctionne-t-il sous Windows XP et * ne * fonctionne pas sous Windows Vista ou Windows 7? – MusiGenesis

+0

Oui, mon code fonctionne sous XP et Windows Vista. Mais copmletely ne fonctionne pas dans Windows 7. Dans Windows 7, je suppose, son mécanisme de protection. (Je ne peux même pas lister les DLL chargées dans le processus explorer.exe) – vsvasya

+1

Par curiosité, quelle était la solution? – Brian

Répondre

3

Je l'ai résolu! C'est simple, c'était une machine 64 bits) Donc, je compile mon code pour 64 bits et le travail de démarrage de widget fonctionne plutôt bien!

Et aussi -

PaintDesktop(hdc); 

produira fond d'écran très lumineux dans Windows7 (et Vista) avec Aero. (le papier peint de l'utilisateur est éclairci). Doit être

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

cause de cela - Aero traite PaintDesktop() comme d'habitude peinture (sur fond d'écran virtuel, qui est le même que sur le bureau) avec sommation des couleurs.

Cordialement! :)

+0

J'essaie juste d'écrire une chose similaire. Je veux afficher une image sous les icônes du bureau. Je ne suis pas un expert en programmation Windows, j'ai donc du mal avec ça. Pourriez-vous s'il vous plaît poster quelque part le code source pour votre widget? – ciamej

+0

Pouvez-vous poster une réponse plus détaillée. Je suis curieux de savoir comment vous peignez sous les icônes du bureau. – Ampere

Questions connexes