zoukankan      html  css  js  c++  java
  • Shell应用之遍历回收站RecycleBin

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    /*************************************
    * DWORD ListFileInRecycleBin()
    * 功能    遍历并显示回收站中的文件
    *
    * 参数    未使用
    **************************************/

    DWORD ListFileInRecycleBin()
    {
        CHAR pszPath[MAX_PATH];     
    // 保存路径
        // IShellFolder接口
        IShellFolder *pisf = NULL;
        IShellFolder *pisfRecBin = 
    NULL;
        
    // 获取“根”目录,桌面
        SHGetDesktopFolder(&pisfRecBin);
        
        IEnumIDList *peidl = 
    NULL;  // 对象遍历接口
        LPITEMIDLIST pidlBin = NULL;
        LPITEMIDLIST idlCurrent = 
    NULL;

        LPMALLOC pMalloc = 
    NULL;
        
    // 分配
        SHGetMalloc(&pMalloc);
        
    // 回收站位置
        SHGetFolderLocation(NULL, CSIDL_BITBUCKET, NULL0, &pidlBin);
        
    // 绑定回收站对象
        pisfRecBin->BindToObject(pidlBin,NULL,IID_IShellFolder,(void **) &pisf);
        
    // 列举回收站中的对象,得到IEnumIDList接口,包括SHCONTF_FOLDERS、
        // SHCONTF_NONFOLDERS、SHCONTF_INCLUDEHIDDEN类型的对象
        pisf->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS |SHCONTF_INCLUDEHIDDEN, &peidl);

        STRRET strret;
        ULONG uFetched;

        HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
        printf(
    " Files In Recycle Bin: ");

        
    while(1)
        {
            
    // 遍历IEnumIDList对象,idlCurrent为当前对象
            if(peidl->Next(1,&idlCurrent,&uFetched) == S_FALSE)
                
    break;
            
    // 获取回收站当前对象当前的路径,这里没有输出结果,读者可自行修改
            SHGetPathFromIDList(idlCurrent,  pszPath);
            
    // DisplayName,删除前的路径
            pisf->GetDisplayNameOf(idlCurrent,SHGDN_NORMAL,&strret);
            
    // 显示,printf可能会造成字符编码不正确。
            WriteConsoleW(hOutPut,L" ",1,NULL,NULL);
            WriteConsoleW(hOutPut,strret.pOleStr,lstrlenW(strret.pOleStr),
    NULL,NULL);
            WriteConsoleW(hOutPut,L
    " ",1,NULL,NULL);
        }
        
    // 释放资源
        pMalloc->Free(pidlBin);
        pMalloc->Free(strret.pOleStr);
        pMalloc->Release();
        peidl->Release();
        pisf->Release();
        
    return 0;   
    }
  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/MakeView660/p/8663998.html
Copyright © 2011-2022 走看看