绕开注册表探测文件类型

那就是使用SHGetFileInfo函数,调用这个函数可以获得所有关于文件的信息。它有一个聪明的选项,SHGFI_USEFILEATTRIBUTES,这个选项允许你传递一个假文件名,如mumble.txt。即便文件不存在,SHGetFileInfo也能获得你要的信息。

SHFILEINFO shfi;
memset(&shfi,0,sizeof(shfi));
SHGetFileInfo("foo.bmp", 
FILE_ATTRIBUTE_NORMAL,
&shfi, sizeof(shfi),
SHGFI_ICON|SHGFI_USEFILEATTRIBUTES);

需要注意的一点是:

If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi, you are responsible for freeing it with tabindex="0" xmlns:mshelp="http://msdn.microsoft.com/mshelp" keywords="_win32_destroyicon">DestroyIcon when you no longer need it.

例子:

//CEdit m_ext;
 //CStatic m_Icon;

 LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
 {
  // TODO: Add validation code
  CString strExt;
  char temp[256] = {0};
  ::GetWindowText(m_ext,temp,256);
  strExt = temp;
  strExt.TrimLeft(".");
  CString strTemp = "nothing.";
  strTemp += strExt;
  SHFILEINFO shfi;
  memset(&shfi,0,sizeof(shfi));
  SHGetFileInfo(strTemp,
   FILE_ATTRIBUTE_NORMAL,
   &shfi,
   sizeof(shfi),
   SHGFI_ICON|SHGFI_USEFILEATTRIBUTES);
  
  DestroyIcon(m_Icon.SetIcon(shfi.hIcon));
  return 0;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值