2012-03-05 9 views
5

que utilizo:¿Cómo obtengo un control del botón Inicio en Windows 7?

Hwnd hStart = ::FindWindow ("Shell_TrayWnd",NULL); // get HWND of taskbar first 
hStart = ::FindWindowEx (hStart, NULL,"BUTTON", NULL); // get HWND of start button 

para conseguir iniciar el mango del botón. Se ejecuta correctamente en Windows XP, pero en Windows 7, ::FindWindowEx (hStart, NULL,"BUTTON", NULL) siempre devuelve 0 y GetLastError() devuelve 0 también.

¿Por qué es eso?

+2

supongo que el botón de inicio en Windows 7 ya no tiene la clase 'BUTTON', pero puedo estar equivocado. Puede consultar con Spy ++ lo que es ahora, pero le recomiendo encarecidamente que no se meta con elementos fundamentales de la IU como el botón de Inicio. ¿Qué estás intentando lograr? –

+5

¿Qué harías con un control de botón de inicio, incluso si tienes uno? – Gabe

+0

Gabe, acabo de estudiar sobre HOOK. :) – Fish

Respuesta

7

En Windows 7, el botón de inicio, que tiene el nombre de clase "Button", es un elemento secundario de la ventana del escritorio. Su código asume que el botón de inicio es un elemento secundario de la ventana llamada "Shell_TrayWnd" que, de hecho, parece ser la forma en que la barra de tareas y el menú de inicio se implementaron en XP.

para Windows 7 que desea usar algo como esto:

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", NULL); 

Aunque yo creo que sería mejor búsqueda por su nombre para asegurarse de que obtendrá el botón derecho.

hStart = ::FindWindowEx(GetDesktopWindow(), NULL, "Button", "Start"); 

No estoy seguro de cómo Vista implementa su barra de tareas y el menú de inicio, pero puede utilizar Spy ++ para averiguarlo.

Habiendo dicho todo esto, sería mucho mejor si puede encontrar una manera de lograr sus objetivos sin hurgar en detalles específicos de la implementación.

+10

Y no olvide que en Windows 8 todo será completamente diferente. –

+5

@Mark Sí, ahora sería un excelente momento para limpiar la casa y abandonar tales hacks –

+0

¡Gracias! He intentado 'hWnd = :: FindWindow (" Button "," Start ");', funciona en Windows 7, mientras que en XP simplemente devuelve NULL. Supongo que el botón de inicio es una ventana secundaria de la barra de tareas en XP, mientras que en Windows 7 es una ventana independiente. :) – Fish

-2

:: FindWindow (L "Shell_TrayWnd", NULL);

este código es para la barra de tareas completa

Cuestiones relacionadas