写一个exe,用VB或者VC,输入一个windows文件,提取缩略图,生成.bmp文件。
参数是输入和输出的文件名。
我从未用过windows的API,请问各位有没有相关的代码实例?? 多谢

解决方案 »

  1.   

    http://blog.csdn.net/liuxiaoyi666/archive/2006/11/28/1417749.aspx
      

  2.   

    谢谢楼上的回答,对,是一个windows下的文件,可能不是图片,仅仅是有缩略图的文件,可能是视频,也可能是工程制图的文件。
      

  3.   

    /* lib C/C++ */
    #include <string.h>
    #include <iostream>/* GESTION DES INTERFACES */
    /* pour IShellFolder */
    #include <shobjidl.h>
    /* pour IIDFromString */
    #include <Objbase.h>
    /* pour IDispatch */
    #include <Oleauto.h>
    /* pour SHGetDesktopFolder */
    #include <shlobj.h>
    using namespace std;
    #define CteGUID_IShellFolder L"{000214E6-0000-0000-C000-000000000046}"
    #define CteGUID_IDispatch L"{00020400-0000-0000-C000-000000000046}"
    #define CteGUID_IExtractImage L"{BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}"void convertStringToLPWSTR(char *i_value_to_convert, LPWSTR *o_value)
    {
    int size = (int)strlen(i_value_to_convert) + 1;
    LPWSTR tmp = new wchar_t[size];
    MultiByteToWideChar(CP_ACP, 0, i_value_to_convert, size, tmp, size);
    *o_value = tmp;
    }
    int main(int argc, char**argv)
    {
    char path[255 + 1];
    LPWSTR lpwstr_path;char filename[255 + 1];
    LPWSTR lpwstr_filename;HRESULT hrc = S_OK;IShellFolder *p_desktop = NULL;
    IShellFolder *p_folder = NULL;
    IExtractImage *p_thumbnail = NULL;
    LPITEMIDLIST pidl;IID iid_IShellFolder; /* explorer windows */
    IID iid_IDispatch; /* pour les QueryInterface / Release */
    IID iid_IExtractImage; /* pour extraine la miniature de l'explorateur */hrc = IIDFromString(CteGUID_IShellFolder, &iid_IShellFolder);
    if (SUCCEEDED(hrc))
    {
    cout << "IID CteGUID_IShellFolder correctement recupere" << endl;
    }
    hrc = IIDFromString(CteGUID_IDispatch, &iid_IDispatch);
    if (SUCCEEDED(hrc))
    {
    cout << "IID CteGUID_IDispatch correctement recupere" << endl;
    }
    hrc = IIDFromString(CteGUID_IExtractImage, &iid_IExtractImage);
    if (SUCCEEDED(hrc))
    {
    cout << "IID CteGUID_IExtractImage correctement recupere" << endl;
    }hrc = SHGetDesktopFolder(&p_desktop);
    if (SUCCEEDED(hrc))
    {
    cout << "SHGetDesktopFolder OK" << endl;
    strcpy(path, "C:\\catiman\\catuii\\");
    convertStringToLPWSTR(path, &lpwstr_path);
    hrc = p_desktop->ParseDisplayName(0, 0, lpwstr_path, 0, &pidl, 0);
    if (SUCCEEDED(hrc))
    {
    cout << "ParseDisplayName " << path <<" OK" << endl;
    }
    hrc = p_desktop->BindToObject(pidl, 0, iid_IShellFolder, (void**)&p_folder);
    if (SUCCEEDED(hrc))
    {
    cout << "BindToObject OK" << endl;
    }
    strcpy(filename, "Plan.CATPart");
    convertStringToLPWSTR(filename, &lpwstr_filename);hrc = p_folder->ParseDisplayName(0, 0, lpwstr_filename, 0, &pidl, 0);
    if (SUCCEEDED(hrc))
    {
    cout << "ParseDisplayName "<< filename <<" OK" << endl;
    }/*
    hrc = p_folder->BindToObject(pidl, 0, iid_IExtractImage, (void**)&p_thumbnail);
    if (SUCCEEDED(hrc))
    {
    cout << "BindToObject OK" << endl;
    }
    else{ 
    cout << "BindToObject FAIL"<<endl;
    }
    */
    /*
    hrc = p_folder->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*)pidl, IID_IExtractImage, NULL, (LPVOID*)&p_thumbnail); 
    if (SUCCEEDED(hrc))
    {
    cout << "GetUIObject OK" << endl;
    }
    else{
    cout << "GetUIObject FAIL"<< endl;
    }
    */}
    else {
    cout << "impossible create instance of IShellFolder" << endl;
    }
    cout << "end process" << endl;
    getchar();
    return 0;
    }这里是我目前查资料写出来的代码,到最后两个函数之前没问题,返回正确,但最后两个都出错,倒是能编译运行,请问错在哪里???
    另外后面我要保存获取的图片写到一个bmp文件中,该如何继续呢,用哪些API?
    各位我从未涉足windows shell的东西,C++只知道语法,请知道的朋友指教。