SHOpenFolderAndSelectItems - 实现查找目标

本文提供了一段使用R3实现查找特定文件路径的代码示例,包括获取桌面目录、解析文件名并打开指定文件夹的功能。代码通过调用Windows Shell API来实现目录浏览和文件选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SHOpenFolderAndSelectItems - 实现查找目标
2009年08月11日 星期二 01:02

睡觉之前发点代码,今天发现R3下新的一个结束进程的方法,原理跟内存清零差不多,不过速度快多了(目前看到的那些清零的R3源码,连个判断都懒得加,速度太慢了...),哎,R3下拿不到句柄的话说这么多也就没用了.

不知道查找目标是啥的搜索下就知道了,根据网上一个人的代码改的,已经写成函数了,只要把目标的路径传进去就可以了.
应该都会用吧 ^_^


CoInitialize(NULL);

 
BOOL OpenFolderAndSelectFile( LPSTR lpszFilePath)
{
    
//
    // GetFolder
    //
    DWORD dw = lstrlenA(lpszFilePath) - 1;
    for (;dw != -1;dw--)
     {
        if ( lpszFilePath[dw] == '\\')
         {
            break;
         }
     }
    if ( dw == -1)
     {
        return
 FALSE;
     }
    //
    // Get a pointer to the Desktop's IShellFolder interface.
    // 
     LPSHELLFOLDER pDesktopFolder;
    if ( SUCCEEDED(SHGetDesktopFolder( &pDesktopFolder)))
     {
        // 
        // IShellFolder::ParseDisplayName requires the file name be in
        // Unicode.
        // 
         OLECHAR oleStr[MAX_PATH];

         lpszFilePath[dw] = '\0';
         MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED,
             lpszFilePath, -1, oleStr, _countof(oleStr));
        // 
        // Convert the path to an ITEMIDLIST.
        // 
         LPITEMIDLIST     pidl;
        ULONG             chEaten;
        ULONG             dwAttributes;
        HRESULT             hr;

         hr = pDesktopFolder->ParseDisplayName(
             NULL, NULL, oleStr, &chEaten, &pidl, &dwAttributes);
        if (FAILED(hr))
         {
             pDesktopFolder->Release();
            return FALSE;
         }
         LPCITEMIDLIST pidlFolder = pidl;

         lpszFilePath[dw] = '\\';
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED,
             lpszFilePath, -1, oleStr, _countof(oleStr));

         hr = pDesktopFolder->ParseDisplayName(
             NULL, NULL, oleStr, &chEaten, &pidl, &dwAttributes);
        if (FAILED(hr))
         {
             pDesktopFolder->Release();
            return FALSE;
         }
         LPCITEMIDLIST pidlFile = pidl;

         CoInitialize( NULL);
         hr = SHOpenFolderAndSelectItems( pidlFolder, 1, &pidlFile, 0);

         pDesktopFolder->Release();

        if ( hr == S_OK)
         {
            return TRUE;
         }
     }
    return FALSE;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值