2009-09-11 10 views
7

Escribí un programa que pinta el widget en el fondo de escritorio, debajo de los íconos del escritorio, y todo estaba bien. Pero revelo un error extraño - mi programa no funcionaba en otras computadoras - muestran el mismo escritorio sin widget después del inicio.dibujo debajo de los iconos en el escritorio

Entonces, ¿alguien tiene experiencia, algún conocimiento en esta área? ¡Por favor, ayúdame! :)

(no puedo encontrar ningún equipo cercano, donde Reproductor no las obras, en mi computadora todo funciona bien. escribí un montón de programas de prueba, cuyos intentos de dibujar cualquier cosa en el escritorio con métodos bien, pero la prueba muestra nada demasiado en mis amigos computadoras)

método de dibujo:.

escribí una DLL, que encuentra la ventana del escritorio (progman-> niño-> niño)) y crea un gancho e instalar propio procedimiento de ventana escritorio. En procedimiento de ventana engancho WM_ERASEBKGND:

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

// Me salto en este código de obtención y definición de áreas de recorte para el dibujo rápido. (probé todas las combinaciones con el recorte y sin recorte)

Y en las pruebas también tratando de pintar de widget en el mensaje WM_PAINT con los mismos resultados - todos ya trabaja en mí, pero no funciona en todos mis amigos.

upd: ¡Lo solucioné! :)

+0

¿Su código funciona en Windows XP y * no * funciona en Windows Vista o Windows 7? – MusiGenesis

+0

Sí, mi código funciona en XP y Windows Vista. Pero por completo no funciona en Windows 7. En Windows 7, supongo que es un mecanismo de protección. (No puedo incluso listar las DLL que se cargaron en el proceso explorer.exe) – vsvasya

+1

Por curiosidad, ¿cuál fue la solución? – Brian

Respuesta

3

Lo he resuelto! Es simple era una máquina de 64 bits) ¡Así que compilo mi código para 64 bits y el inicio de widget funciona bastante bien!

Y, también -

PaintDesktop(hdc); 

producirá fondo de pantalla muy brillante en Windows 7 (y Vista) con Aero. (El fondo de pantalla del usuario se ilumina). Debe ser

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

causa de esto - Aero trata PaintDesktop() como pintura habitual (más de fondo de la pantalla virtual, que es el mismo que en el escritorio) con la suma de color.

¡Recuerdos! :)

+0

Estoy tratando de escribir algo similar. Quiero mostrar una imagen debajo de los íconos del escritorio. No soy un experto en programación de Windows, así que tengo dificultades con esto. ¿Podría publicar algún código fuente en algún lugar para su widget? – ciamej

+0

¿Puedes enviar una respuesta más detallada? Tengo curiosidad por cómo pintas debajo de los íconos del escritorio. – Ampere

Cuestiones relacionadas