求一个实例,提取缩略图 写一个exe,用VB或者VC,输入一个windows文件,提取缩略图,生成.bmp文件。参数是输入和输出的文件名。我从未用过windows的API,请问各位有没有相关的代码实例?? 多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/liuxiaoyi666/archive/2006/11/28/1417749.aspx 谢谢楼上的回答,对,是一个windows下的文件,可能不是图片,仅仅是有缩略图的文件,可能是视频,也可能是工程制图的文件。 /* 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++只知道语法,请知道的朋友指教。 CFile类读写文件的问题 MFC 单文档问题 如果做到响应一个按键 弹出程序界面? 请教:如何实现小键盘的功能? 新手问:如何发送一个http请求给web服务器,并得到返回值。 调用函数出错inet_ntoa(in) 谁知道有《VC++ 技术内幕》第四版 下载啊 如何显示进度? FMStocks 2000是什么东西,用来做什么东西的。 Wininet API提供的ftp函数支持断点续传吗?? vc播放声音文件 物体自身发光,关于glMaterialfv的GL_EMISSION参数使用问题
#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++只知道语法,请知道的朋友指教。