2011-07-05 8 views
8

Projektuję system, w którym użytkownik wykonuje gest, następnie mój program przechwytuje go (za pomocą kamery internetowej), a mój program wyszukuje w systemie reguł (opartym na XML), które są akcjami to musi zrobić.Wykonywanie "Show Desktop" z C++

OK, kiedy już wyjaśniłem tło, chciałbym wiedzieć, w jaki sposób mogę zrobić, aby mój program "wykonał" przycisk Pokaż pulpit. Chciałbym zapewnić użytkownikowi możliwość wykonania gestu i pokazania pulpitu. Czy to możliwe? Szukałem programu (.exe), który wykonuje przycisk Pokaż pulpit i obawiam się, że nie istnieje.

Odpowiedz

7

Od this MSDN blog post (z datą 2004, ale na pewno nadal aktualne), należy zadzwonić ToggleDesktop().

w 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(); 

EDIT

C++ wersja:

#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

Działa doskonale. Dzięki :) – Oni

4

Od 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; 
} 

Mam nadzieję, że to pomaga. Przynajmniej robi to, co powinien, minimalizuje wszystkie okna. pokazuje pulpit.

+0

Um, polega to na potrójnym nieudokumentowanym zachowaniu: Nazwa klasy paska zadań, identyfikator polecenia "minimalizuj wszystko" oraz identyfikator polecenia "cofnij zminimalizuj wszystko". Wszystkie te wartości mogą się zmienić w dowolnym momencie. –

1

W systemie Windows można skopiować skrypt:

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

do pliku „somefile.scf” i powołać go z powłoki za pomocą „somefile.scf” ręcznie. Jest to również możliwe w C++.