rt

解决方案 »

  1.   

    TCHAR path[_MAX_PATH];
    ::SystemParametersInfo(SPI_GETDESKWALLPAPER, _MAX_PATH, path, 0);
      

  2.   

    用SystemParametersInfo(SPI_GETDESKWALLPAPER, _MAX_PATH, path, 0)时,VC报错:undeclared identifier
      

  3.   

    对!“SPI_GETDESKWALLPAPER undeclared identifier”
      

  4.   

    hehe.
    SPI_GETDESKWALLPAPER是2000/xp才支持的。vc6出来的时候,大概还没有2000呢,因此,如果是原版的vc 6,没有升级过sdk,肯定会出现这个变量没有定义。
    这个值具体是多少,我也不知道,不过,.net的系统中,应该有这个变量的定义,msdn中就有,不过,msdn没有列出它等于几来。
      

  5.   

    #include "ShlObj.h"
    #include "afxconv.h"
    void CTestDlg::OnOk() 
    {
    TCHAR path[_MAX_PATH];
    /*
    // 使用SystemParametersInfo
    ::SystemParametersInfo(SPI_GETDESKWALLPAPER, _MAX_PATH, path, 0);
    */
    // 使用注册表
    LPCTSTR regpath = _T("Control Panel\\Desktop");
    LPCTSTR valuename = _T("ConvertedWallpaper");
    HKEY hkey = NULL;
    if (ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_CURRENT_USER, regpath, 0, KEY_READ, &hkey))
    {
    DWORD size = _MAX_PATH;
    if (ERROR_SUCCESS == ::RegQueryValueEx(hkey, valuename, NULL, NULL, (LPBYTE)path, &size))
    {
    MessageBox(path, _T("Wall Paper"), MB_OK | MB_ICONINFORMATION);
    }
    ::RegCloseKey(hkey);
    }
    // use IActiveDesktop
    if (FAILED(::CoInitialize(NULL)))
    {
    // com initialize error, quit
    return;
    }
    IActiveDesktop* p = NULL;
    if (SUCCEEDED(::CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_ALL, IID_IActiveDesktop, (void**)&p)))
    {
    wchar_t wpath[_MAX_PATH];
    if (SUCCEEDED(p->GetWallpaper(wpath, _MAX_PATH, 0)))
    {
    USES_CONVERSION;
    ::lstrcpy(path, W2T(wpath));
    MessageBox(path, _T("Wall Paper"), MB_OK | MB_ICONINFORMATION);
    }
    p->Release();
    }
    ::CoUninitialize();
    }
    注意,使用IActiveDeskop来获得的时候,stdafx.h特别麻烦,以下是我目前的stdafx.h:
    #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers#define _WIN32_IE 0x0500#include <afxwin.h>         // MFC core and standard components
    #include <afxext.h>         // MFC extensions
    #include <wininet.h>
    #include <afxdisp.h>        // MFC Automation classes
    #include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h> // MFC support for Windows Common Controls
    #endif // _AFX_NO_AFXCMN_SUPPORT
    使用IActiveDesktop出来的结果,好像不是很对。