【原创】如何获取系统目录和文件信息

新建一个单文档程序GetExtractIcon

修改CGetExtractIconView类的OnDraw函数如下

void CGetExtractIconView::OnDraw(CDC* pDC)
{
    CGetExtractIconDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    char szSysDir[MAX_PATH+1];
    char szWinDir[MAX_PATH+1];
    char szcurDir[MAX_PATH+1];
    char szTmpPath[MAX_PATH+1];
    char szPathName[MAX_PATH+1];
    //System目录
    GetSystemDirectory(szSysDir,MAX_PATH);
    //Windows目录
    GetWindowsDirectory(szWinDir,MAX_PATH);
    //当前目录
    GetCurrentDirectory(MAX_PATH,szcurDir);
    //临时目录
    GetTempPath(MAX_PATH,szTmpPath);
    //程序完整路径
    GetModuleFileName(NULL,szPathName,MAX_PATH);
 
    pDC->TextOut(10,100,CString("SystemDirectory - ") + CString(szSysDir));
    pDC->TextOut(10,120,CString("WindowsDirectory - ") + CString(szWinDir));
    pDC->TextOut(10,140,CString("CurrentDirectory - ") + CString(szcurDir));
    pDC->TextOut(10,160,CString("TempPath - ") + CString(szTmpPath));
    pDC->TextOut(10,180,CString("PathName - ") + CString(szPathName));
 
    //记事本的路径
    CString strFileName=szSysDir + CString("\\notepad.exe");
    SHFILEINFO stFileInfo;
    
    //得到文件信息
    if(::SHGetFileInfo(strFileName,0,&stFileInfo,sizeof(stFileInfo),
        SHGFI_ICON | SHGFI_DISPLAYNAME | SHGFI_TYPENAME))
    {
        pDC->DrawIcon(10,10,stFileInfo.hIcon);
        pDC->TextOut(50,10,CString(stFileInfo.szDisplayName));
        pDC->TextOut(50,30,CString(stFileInfo.szTypeName));
    }
    //使用ExtractIcon得到explorer的图标
    HICON hIcon=::ExtractIcon(AfxGetInstanceHandle(),"explorer.exe",0);
    if(hIcon && hIcon!=(HICON)-1)
        pDC->DrawIcon(10,50,hIcon);
}

SHFILEINFO结构体的原型:

typedef struct _SHFILEINFO{ 
    HICON hIcon;  
    int   iIcon;   
    DWORD dwAttributes;   
    TCHAR szDisplayName[MAX_PATH];  
    TCHAR szTypeName[80];   
} SHFILEINFO; 

SHGetFileInfo函数原型:

DWORD_PTR SHGetFileInfo(
    LPCTSTR pszPath, //包含路径和文件名
    DWORD dwFileAttributes, //文件的属性,如果uflags不包括
               //SHGFI_USEFILEATTRIBUTES标志, 这个参数将被忽略
    SHFILEINFO *psfi,  //SHFILEINFO类型的指针,用来接收文件信息
    UINT cbFileInfo, //SHFILEINFO类型的大小
    UINT uFlags //这个标准指定文件信息检索
);

uFlags标志可以是以下值的组合:

SHGFI_ATTR_SPECIFIEDSHGFI_ATTRIBUTESSHGFI_DISPLAYNAMESHGFI_EXETYPE SHGFI_ICON SHGFI_ICONLOCATION SHGFI_LARGEICON SHGFI_LINKOVERLAY SHGFI_OPENICON SHGFI_PIDL SHGFI_SELECTED SHGFI_SHELLICONSIZE SHGFI_SMALLICON SHGFI_SYSICONINDEX SHGFI_TYPENAME SHGFI_USEFILEATTRIBUTES

转载于:https://www.cnblogs.com/mx113/archive/2009/12/04/1617340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值