开发者

Executing "Show Desktop" from C++

开发者 https://www.devze.com 2023-03-17 03:53 出处:网络
I am designing a system where the use开发者_JS百科r makes a gesture, then my program captures it (using a web cam) and my program looks in a rule system (based on XML) which are the actions that it ha

I am designing a system where the use开发者_JS百科r makes a gesture, then my program captures it (using a web cam) and my program looks in a rule system (based on XML) which are the actions that it has to do.

Ok, once I have explained the background, I'd like to know how I could make my program "execute" the Show Desktop button. I'd like to provide the user the possibility to do a gesture and show the desktop. Is it possible? I have been looking the program (.exe) that executes the Show Desktop button and I am afraid that does not exist.


From this MSDN blog post (dated 2004 but surely still valid), you must call ToggleDesktop().

in 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++ version:

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


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

Hope it helps. It at least does what it should, minimizes all the windows aka. shows desktop.


You need to call ToggleDesktop.


In Windows you can copy the script:

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

into a file "somefile.scf" and invoke it from the shell by executing "somefile.scf" by hand. This is also possible with C++.

0

精彩评论

暂无评论...
验证码 换一张
取 消