ocx也是com组件,用调用com组件的方法调用不就得了。

解决方案 »

  1.   

    以下是编程步骤:初始化COM库。 (Initialize)
    创建一个与活动桌面交互的COM对象,并取得IActiveDesktop接口。
    调用COM对象的GetWallpaper()方法。
    如果GetWallpaper()成功,则输出/显示墙纸文件名。
    释放接口(Release())。
    收回COM库(Uninitialize)。WCHAR   wszWallpaper [MAX_PATH];
    CString strPath;
    HRESULT hr;
    IActiveDesktop* pIAD;    // 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用
        // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。    CoInitialize ( NULL );    // 2. 使用外壳提供的活动桌面组件对象类创建COM对象。
        // 第四个参数通知COM需要什么接口(这里是IActiveDesktop).    hr = CoCreateInstance ( CLSID_ActiveDesktop,
                                NULL,
                                CLSCTX_INPROC_SERVER,
                                IID_IActiveDesktop,
                                (void**) &pIAD );    if ( SUCCEEDED(hr) )
            {
            // 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。
            hr = pIAD->GetWallpaper ( wszWallpaper, MAX_PATH, 0 );        if ( SUCCEEDED(hr) )
                {
                // 4. 如果 GetWallpaper() 成功,则输出它返回的文件名字。
                // 注意这里使用wcout 来显示Unicode 串wszWallpaper.  wcout 是
                // Unicode 专用,功能与cout.相同。
                wcout << L"Wallpaper path is:\n    " << wszWallpaper << endl << endl;
                }
            else
                {
                cout << _T("GetWallpaper() failed.") << endl << endl;
                }        // 5. 释放接口。
            pIAD->Release();
            }
        else
            {
            cout << _T("CoCreateInstance() failed.") << endl << endl;
            }    // 6. 收回COM库。MFC 程序不用这一步,它自动完成。
    CoUninitialize();
     
    在这个例子中,输出/显示Unicode 串 wszWallpaper用的是std::wcout。 
      

  2.   

    to snowglede(雪鹰):
    我还是没搞懂如何做,可能我太笨了,我对COM不太了解。
    能给出源码吗,谢谢!!