用VB可不可以打开thumbs.db数据库文件,把其中的缩略图显示在VB的图片框里
用VB能否打开thumbs.db数据库文件,把其中的缩略图显示在VB的图片框里?
我最近在研究VB的缩略图显示图片问题,各种方法都试了,但速度和系统缩略图相比太慢了,我以为是XP系统有特殊的、速度极快绘图方法不为我们所知,但是仔细想一想,XP系统也是用GDI+绘图,但我用GDI+绘图就快不起来呢?一直很不解,今天浏览网页,无意中发现这样一段话:
windows xp显示缩略图原理是这样的:首先读取当前目录中的thumbs.db文件,该文件记录了该目录下所有图片的缩略图信息;如果该文件不存在或其中没有该图片的缩略图信息,系统会尝试读取图片的exif信息,看是否存在缩略图信息;如果还是没有,系统将自动生成,并将缩略图信息保存在thumbs.db文件中。 thumbs.db是个隐藏文件.
原来XP系统显示的缩略图并非是当时绘的,而是早就存在于thumbs.db数据库文件中,这就是它快的密诀。thumbs.db我原以为是ACDSee的文件,原来是这种东东!
我的问题是:用VB能否打开thumbs.db数据库文件,把其中的缩略图显示在VB的图片框里。
本人可用分很多,若有人能解决此问题,另外再送200分。
顶贴有分。
------解决方案--------------------
sf~~~~~~~~~~~~
------解决方案--------------------
bd~~~~~~~~~~
------解决方案--------------------
db~~~~~~~~~
------解决方案--------------------
绑定,早就知道xp有这个功能了,而且还能预读取视频截图呢。
------解决方案--------------------
能,这是一个数据库文件,早前看到这样的文章还是代码来着,我给忘了
lz 可根据这个线索 google下,看看是什么数据,有什么特殊结构...
然后自己解文件取数据就行了
------解决方案--------------------
http://blog.****.net/downmoon/archive/2009/06/04/4241315.aspx
http://www.cnblogs.com/downmoon/archive/2009/06/04/1495915.html
------解决方案--------------------
没搞过,帮顶
------解决方案--------------------
我也顶一下,能解决就好。
------解决方案--------------------
我讨厌控件,没控件不能完成吗?
------解决方案--------------------
另外我还想知道这是一个什么格式的文件(或说这是哪一种数据库文件)??
------解决方案--------------------

手机代理上网真的象蜗牛爬一样~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
不懂,帮顶。。。貌似这个软件可以查看thumbs.db。。。
http://www.skycn.com/soft/27308.html
------解决方案--------------------
我最近在研究VB的缩略图显示图片问题,各种方法都试了,但速度和系统缩略图相比太慢了,我以为是XP系统有特殊的、速度极快绘图方法不为我们所知,但是仔细想一想,XP系统也是用GDI+绘图,但我用GDI+绘图就快不起来呢?一直很不解,今天浏览网页,无意中发现这样一段话:
windows xp显示缩略图原理是这样的:首先读取当前目录中的thumbs.db文件,该文件记录了该目录下所有图片的缩略图信息;如果该文件不存在或其中没有该图片的缩略图信息,系统会尝试读取图片的exif信息,看是否存在缩略图信息;如果还是没有,系统将自动生成,并将缩略图信息保存在thumbs.db文件中。 thumbs.db是个隐藏文件.
原来XP系统显示的缩略图并非是当时绘的,而是早就存在于thumbs.db数据库文件中,这就是它快的密诀。thumbs.db我原以为是ACDSee的文件,原来是这种东东!
我的问题是:用VB能否打开thumbs.db数据库文件,把其中的缩略图显示在VB的图片框里。
本人可用分很多,若有人能解决此问题,另外再送200分。
顶贴有分。
------解决方案--------------------
sf~~~~~~~~~~~~
------解决方案--------------------
bd~~~~~~~~~~
------解决方案--------------------
db~~~~~~~~~
------解决方案--------------------
绑定,早就知道xp有这个功能了,而且还能预读取视频截图呢。
------解决方案--------------------
能,这是一个数据库文件,早前看到这样的文章还是代码来着,我给忘了
lz 可根据这个线索 google下,看看是什么数据,有什么特殊结构...
然后自己解文件取数据就行了
------解决方案--------------------
http://blog.****.net/downmoon/archive/2009/06/04/4241315.aspx
http://www.cnblogs.com/downmoon/archive/2009/06/04/1495915.html
------解决方案--------------------
没搞过,帮顶
------解决方案--------------------
我也顶一下,能解决就好。
------解决方案--------------------
我讨厌控件,没控件不能完成吗?
------解决方案--------------------
另外我还想知道这是一个什么格式的文件(或说这是哪一种数据库文件)??
------解决方案--------------------
手机代理上网真的象蜗牛爬一样~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
不懂,帮顶。。。貌似这个软件可以查看thumbs.db。。。
http://www.skycn.com/soft/27308.html
------解决方案--------------------
//找到一个C++的
//Thumbs.db 文件怎么打开
#include <stdlib.h>
#include <stdio.h>
#define NFIELDS 5
#define TRUE 1
#define FALSE 0
/* DBF文件头结构 */
struct dbf_head{
char vers;
unsigned char yy,mm,dd;
unsigned int no_recs;
unsigned short head_len,rec_len;
char reserved[20];
};
/* DBF字段描述结构 */
struct field_element{
char field_name[11];
char field_type;
unsigned int offset;
unsigned char field_length;
unsigned char field_decimal;
char reserved1[2];
char dbaseiv_id;
char reserved2[10];
char production_index;
};
char *dbf_fields_name[NFIELDS]={
"a", "b","c","d","e"
};
/* 全局变量 */
struct dbf_head file_head;
struct field_element *fields;
int *length;
unsigned int *offset;
/* 整形数字节顺序改变函数 */
void revert_unsigned_short(unsigned short *a)
{
unsigned short left,right;
left=right=*a;
*a=((left&0x00ff)<<8)
------解决方案--------------------
((right&0xff00)>>8);
}
void revert_unsigned_int(unsigned int *a)
{
unsigned int first,second,third,forth;
first=second=third=forth=*a;
*a=((first&0x000000ff)<<24)
------解决方案--------------------
((second&0x0000ff00)<<8)
------解决方案--------------------
((third&0x00ff0000)>>8)
------解决方案--------------------
((forth&0xff000000)>>24);
}
/* 主函数代码 */
void main()
{
register int i,j;
FILE *fp_dat;
char *buffer;
char *allspace;
int fields_count, matched=FALSE;
unsigned int counts;
/* 打开dbf文件 */
if((fp_dat=fopen("a.dbf","rb"))==NULL){
fprintf(stderr,"Cannot open dbf file to read!\n");
exit(1);
}
/* 读取表头纪录 */
fseek(fp_dat,0L,SEEK_SET);
fread((void*)&file_head,sizeof(struct dbf_head),1,fp_dat);
revert_unsigned_int(&file_head.no_recs);
revert_unsigned_short(&file_head.head_len);
revert_unsigned_short(&file_head.rec_len);
/* 计算字段数 */
fields_count=(file_head.head_len-sizeof(struct dbf_head)-1-263)/sizeof(struct field_element);
/* 开辟存储字段子记录的空间 */
if((fields=(struct field_element*)malloc(sizeof(struct field_element)*fields_count))==NULL){
fprintf(stderr,"Cannot allocate memory for fields array !\n");
fclose(fp_dat);
exit(2);
}
/* 开辟存储一条数据记录的空间 */
if((buffer=(char*)malloc(sizeof(char)*file_head.rec_len))==NULL){
fprintf(stderr,"Cannot allocate memory for record buffer!\n");
fclose(fp_dat);
exit(3);
}
/* 开辟一个全为空格的纪录,以便后面做比较 */
if((allspace=(char*)malloc(sizeof(char)*file_head.rec_len))==NULL){
fprintf(stderr,"Cannot allocate memory for all_space record buffer!\n");