从C ++执行“显示桌面”

时间:2011-07-05 11:34:51

标签: c++ windows desktop

我正在设计一个用户做出手势的系统,然后我的程序捕获它(使用网络摄像头),我的程序在规则系统(基于XML)中查找,这是它必须执行的操作。 / p>

好的,一旦我解释了背景,我想知道如何让我的程序“执行”Show Desktop按钮。我想为用户提供做手势和显示桌面的可能性。可能吗?我一直在寻找执行Show Desktop按钮的程序(.exe),我担心它不存在。

4 个答案:

答案 0 :(得分:7)

this MSDN blog post(2004年但仍然有效),您必须致电ToggleDesktop().

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

修改

C ++版本:

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

答案 1 :(得分:4)

来自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;
}

希望它有所帮助。它至少做了应有的事情,最小化了所有的窗口。显示桌面。

答案 2 :(得分:3)

您需要致电ToggleDesktop

答案 3 :(得分:1)

在Windows中,您可以复制脚本:

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

进入文件“somefile.scf”并通过手动执行“somefile.scf”从shell调用它。这也可以用C ++实现。