2011-07-05 13 views
8

Estoy diseñando un sistema donde el usuario hace un gesto, luego mi programa lo captura (usando una cámara web) y mi programa busca en un sistema de reglas (basado en XML) cuáles son las acciones que tiene que hacerEjecutando "Mostrar escritorio" desde C++

Ok, una vez que haya explicado los antecedentes, me gustaría saber cómo puedo hacer que mi programa "ejecute" el botón Mostrar escritorio. Me gustaría brindar al usuario la posibilidad de hacer un gesto y mostrar el escritorio. ¿Es posible? He estado buscando el programa (.exe) que ejecuta el botón Mostrar escritorio y me temo que eso no existe.

Respuesta

7

De this MSDN blog post (fechado en 2004, pero sin duda sigue siendo válida), debe llamar ToggleDesktop().

en C#:

// Create an instance of the shell class 
Shell32.ShellClass objShel = new Shell32.ShellClass(); 
// Show the desktop 
((Shell32.IShellDispatch4) objShel).ToggleDesktop(); 
// Restore the desktop 
((Shell32.IShellDispatch4) objShel).ToggleDesktop(); 

EDITAR

C++ versión:

#include <Shldisp.h> 

CoInitialize(NULL); 
// Create an instance of the shell class 
IShellDispatch4 *pShellDisp = NULL; 
HRESULT sc = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_SERVER, IID_IDispatch, (LPVOID *) &pShellDisp); 
// Show the desktop 
sc = pShellDisp->ToggleDesktop(); 
// Restore the desktop 
sc = pShellDisp->ToggleDesktop(); 
pShellDisp->Release(); 
+0

Funciona perfectamente. Gracias :) – Oni

4

Desde http://www.codeguru.com/forum/showthread.php?t=310202:

#define MIN_ALL  419 
#define MIN_ALL_UNDO 416 
int main(int argc, char* argv[]) 
{ 
    HWND lHwnd = FindWindow("Shell_TrayWnd",NULL); 
    SendMessage(lHwnd,WM_COMMAND,MIN_ALL,0); // Minimize all windows 
    Sleep(2000); 
    SendMessage(lHwnd,WM_COMMAND,MIN_ALL_UNDO,0); // Bring all back up again. 
    return 0; 
} 

Espero que ayude. Al menos hace lo que debería, minimiza todas las ventanas aka. muestra el escritorio

+0

Um, esto se basa en el comportamiento triplemente indocumentado: el nombre de la clase de la barra de tareas, la identificación del comando para "minimizar todo" y la identificación del comando para "deshacer minimizar todo". Todos estos valores pueden cambiar en cualquier momento. –

1

En Windows puede copiar la secuencia de comandos:

[Shell] 
Command=2 
IconFile=explorer.exe,3 
[Taskbar] 
Command=ToggleDesktop 

en un archivo "somefile.scf" e invocar desde el shell mediante la ejecución de "somefile.scf" a mano. Esto también es posible con C++.