1.
// 获得系统注册后缀对应图标列表
CImageList gSysImageList;
SHFILEINFO shFinfo;
HIMAGELIST hImgList = (HIMAGELIST)SHGetFileInfo( "C:\\",
0, &shFinfo, sizeof( shFinfo ),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
gSysImageList.Attach(hImgList);// 获得指定路径文件的对应图标在gSysImageList中的序号
SHGetFileInfo( strFileName, 0, &shFinfo, sizeof( shFinfo ),
SHGFI_ICON | SHGFI_SMALLICON | SHGFI_TYPENAME );
// shFinfo.iIcon 是文件的后缀对应图标序号
// shFinfo.szTypeName 是文件的注册类型名2. 一个不太完美但还过得去的办法如下,象.txt,.doc文件都没问题。
ShellExecute( hWnd, "open", strName, NULL, m_strDir, SW_SHOW);比较好的解决方法是调用IContextMenu::InvokeCommand ,运用到COM接口,太复杂了,不是一张贴子可以说清的。
// 获得系统注册后缀对应图标列表
CImageList gSysImageList;
SHFILEINFO shFinfo;
HIMAGELIST hImgList = (HIMAGELIST)SHGetFileInfo( "C:\\",
0, &shFinfo, sizeof( shFinfo ),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
gSysImageList.Attach(hImgList);// 获得指定路径文件的对应图标在gSysImageList中的序号
SHGetFileInfo( strFileName, 0, &shFinfo, sizeof( shFinfo ),
SHGFI_ICON | SHGFI_SMALLICON | SHGFI_TYPENAME );
// shFinfo.iIcon 是文件的后缀对应图标序号
// shFinfo.szTypeName 是文件的注册类型名2. 一个不太完美但还过得去的办法如下,象.txt,.doc文件都没问题。
ShellExecute( hWnd, "open", strName, NULL, m_strDir, SW_SHOW);比较好的解决方法是调用IContextMenu::InvokeCommand ,运用到COM接口,太复杂了,不是一张贴子可以说清的。
解决方案 »
- (高手进)VC选项里不同字符集对编码有什么影响?
- VS2005 调用DLL的方法,字符串参数的问题
- 使用C++ in VS2005的问题。
- 出现这个错误是因为什么?"error LNK2001: unresolved external symbol __imp__CM_Request_Device_EjectA@20"
- 使用串口的问题
- VC 小问题在线等
- 在VC中定义一个模板类,一定要将成员函数的实现和类的定义写在一个文件中吗?
- 急,如何给OCX家数字签名?
- 请问:如何用WIN2000+ASP+SQL建立企业数据库;
- **** 十万火急!!我手头有一份鼠标取词的源码,一共只有700行,谁能帮我调通,300分全部奉上!! ****
- 怎样把我的窗口最小化(右下角的图标)
- 无法解决的问题。特急....
在你的应用程序中加入以下两个函数,stol为类型转换函数,reg为文件类型注册函数,执行它,然后重新启动,所有的.abc文件图标全部变为c:\abc.exe的图标,并且双击.abc默认使用abc.exe打开,但你还需要增加对命令行的参数的处理才能进行打开后的进一步操作.
我在VC6+WIN98中使用通过无误,如有问题欢迎联系:[email protected] CLj1Dlg::reg(char p[]) //文件注册函数,p在这里为加点扩展名".abc"
{
//创建入口 HKEY hKEY;
LPBYTE set;
DWORD type_1;
int cbData_1; CString s=p,s1; s.Delete(0);
//在WINDOWS中注册.abc
s+="file";
::RegCreateKey(HKEY_CLASSES_ROOT,p,&hKEY);//建立子键
set=stol(s); //使用自定义函数将CString型转换为LPBYTE方可写入
type_1=REG_SZ;//指定写入数据的类型为字符串
cbData_1=s.GetLength();
::RegSetValueEx(hKEY,"", NULL,type_1,set,cbData_1);
//将.abc的图标改为abc.exe的图标
s1=s;
s1+="\\DefaultIcon";
set=stol("c:\\abc.exe");//设你的abc.exe在C盘根目录下
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY); // 建立入口
::RegSetValueEx(hKEY,"",NULL,type_1,set,11); //向入口写入数据
//设置.abc的打开文件为c:\abc.exe
s1=s;
s1+="\\shell\\open\\command";
set=stol("c:\\abc.exe %1");
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY);
::RegSetValueEx(hKEY,"",NULL,type_1,set,11);}LPBYTE CLj1Dlg::stol(CString s)//类型转换函数
{
char ch1=0;
int i; LPBYTE lpb=new BYTE[s.GetLength()+1];
for(i=0;i<s.GetLength();i++)
{lpb[i]=s[i];}
lpb[i]=ch1;
return lpb;
}
在你的应用程序中加入以下两个函数,stol为类型转换函数,reg为文件类型注册函数,执行它,然后重新启动,所有的.abc文件图标全部变为c:\abc.exe的图标,并且双击.abc默认使用abc.exe打开,但你还需要增加对命令行的参数的处理才能进行打开后的进一步操作.
我在VC6+WIN98中使用通过无误,如有问题欢迎联系:[email protected] CLj1Dlg::reg(char p[]) //文件注册函数,p在这里为加点扩展名".abc"
{
//创建入口 HKEY hKEY;
LPBYTE set;
DWORD type_1;
int cbData_1; CString s=p,s1; s.Delete(0);
//在WINDOWS中注册.abc
s+="file";
::RegCreateKey(HKEY_CLASSES_ROOT,p,&hKEY);//建立子键
set=stol(s); //使用自定义函数将CString型转换为LPBYTE方可写入
type_1=REG_SZ;//指定写入数据的类型为字符串
cbData_1=s.GetLength();
::RegSetValueEx(hKEY,"", NULL,type_1,set,cbData_1);
//将.abc的图标改为abc.exe的图标
s1=s;
s1+="\\DefaultIcon";
set=stol("c:\\abc.exe");//设你的abc.exe在C盘根目录下
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY); // 建立入口
::RegSetValueEx(hKEY,"",NULL,type_1,set,11); //向入口写入数据
//设置.abc的打开文件为c:\abc.exe
s1=s;
s1+="\\shell\\open\\command";
set=stol("c:\\abc.exe %1");
::RegCreateKey(HKEY_CLASSES_ROOT,s1,&hKEY);
::RegSetValueEx(hKEY,"",NULL,type_1,set,11);}LPBYTE CLj1Dlg::stol(CString s)//类型转换函数
{
char ch1=0;
int i; LPBYTE lpb=new BYTE[s.GetLength()+1];
for(i=0;i<s.GetLength();i++)
{lpb[i]=s[i];}
lpb[i]=ch1;
return lpb;
}
顺便说一句,这个论坛实在是太慢了,我用了将近20分钟才把这个贴子发上去!