可以使用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; }
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"));
}