你是说类似那个“显示桌面”那个功能?
可不可以ENUM窗口。然后通过判断它的属性是否具有SHOW等。
从而给它发最小化消息来达到?

解决方案 »

  1.   

    可以使用IActiveDesktop.
    MSDN: IActiveDesktop Interface
    Allows a client program to manage the desktop items and wallpaper on a local computer.这儿有个封装好的。
    #pragma once#include <shlguid.h>
    #include <shlobj.h> // IActiveDesktop
    #include <atlbase.h> // ATL stuff//////////////////
    // Handy class to manipulate the active desktop
    //
    class CActiveDesktop {
    protected:
    // ptr to IActiveDesktop interface
    CComQIPtr<IActiveDesktop> m_pIActiveDesktop;public:
    // ctor: get interface ptr to IActiveDesktop
    CActiveDesktop() {
    HRESULT hr = m_pIActiveDesktop.CoCreateInstance(CLSID_ActiveDesktop,
    NULL, CLSCTX_INPROC_SERVER);
    // If this bombs, you most likely forgot to call call CoInitialize
    ASSERT(SUCCEEDED(hr));
    } // Determine if Active Desktop is enabled. Could also use SHGetSettings
    //
    BOOL IsEnabled() {
    ASSERT(m_pIActiveDesktop);
    COMPONENTSOPT opt;
    opt.dwSize = sizeof(opt);
    HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    return opt.fActiveDesktop;
    }

    // Enable/disable Active Desktop. Calls IActiveDesktop.
    //
    void Enable(BOOL bEnable) {
    ASSERT(m_pIActiveDesktop);
    COMPONENTSOPT opt;
    opt.dwSize = sizeof(opt);
    HRESULT hr = m_pIActiveDesktop->GetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    opt.fActiveDesktop = bEnable;
    hr = m_pIActiveDesktop->SetDesktopItemOptions(&opt,0);
    ASSERT(SUCCEEDED(hr));
    ApplyChanges(AD_APPLY_REFRESH);
    } // Apply the changes
    //
    void ApplyChanges(DWORD dwFlags) {
    ASSERT(m_pIActiveDesktop);
    HRESULT hr = m_pIActiveDesktop->ApplyChanges(dwFlags);
    ASSERT(SUCCEEDED(hr));
    };};这样用就行了。
    void CMainFrame::OnActiveDesktop()
    {
    CActiveDesktop ad;
    ad.Enable(!ad.IsEnabled());
    }void CMainFrame::OnUpdateActiveDesktop(CCmdUI* pCmdUI)
    {
    CActiveDesktop ad;
    pCmdUI->SetText(ad.IsEnabled() ? _T("Disable &Active Desktop")
    : _T("Enable &Active Desktop"));
    }