Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 如何使用自定义搜索结果启动Windows资源管理器_Winapi_Search_Explorer - Fatal编程技术网

Winapi 如何使用自定义搜索结果启动Windows资源管理器

Winapi 如何使用自定义搜索结果启动Windows资源管理器,winapi,search,explorer,Winapi,Search,Explorer,我正在编写一个Windows应用程序,它收集(可能有数百个)文件名,所有文件都位于一个特定文件夹(用户可以选择)的子文件夹中。该列表只是文件夹中所有文件的子集 我不想实现一个提供各种排序和选择可能性的用户界面,因为Windows资源管理器在这方面总是好得多 是否存在允许我从应用程序启动Windows资源管理器的API,以便它显示我的文件列表,就像它是搜索操作的结果一样?资源管理器保存的搜索格式(.search ms)为。唯一的缺点是,当您打开它时,它将执行实际的搜索,它不包含找到的文件的路径列表

我正在编写一个Windows应用程序,它收集(可能有数百个)文件名,所有文件都位于一个特定文件夹(用户可以选择)的子文件夹中。该列表只是文件夹中所有文件的子集

我不想实现一个提供各种排序和选择可能性的用户界面,因为Windows资源管理器在这方面总是好得多


是否存在允许我从应用程序启动Windows资源管理器的API,以便它显示我的文件列表,就像它是搜索操作的结果一样?

资源管理器保存的搜索格式(.search ms)为。唯一的缺点是,当您打开它时,它将执行实际的搜索,它不包含找到的文件的路径列表

如果这是不可接受的,那么你将不得不把手伸进
IShellFolder
和朋友的身体深处

如果托管您自己的窗口是可以接受的,那么
IExplorerBrowser
将为您提供99%的途径。调用以使用自定义文件列表填充视图或直接操作视图。示例代码


如果您必须在资源管理器中显示列表,那么我认为您必须咬紧牙关,实现一个。

资源管理器保存的搜索格式(.search ms)是。唯一的缺点是,当您打开它时,它将执行实际的搜索,它不包含找到的文件的路径列表

如果这是不可接受的,那么你将不得不把手伸进
IShellFolder
和朋友的身体深处

如果托管您自己的窗口是可以接受的,那么
IExplorerBrowser
将为您提供99%的途径。调用以使用自定义文件列表填充视图或直接操作视图。示例代码

如果您必须在资源管理器中显示列表,那么我认为您必须咬紧牙关,实现一个。

您可以使用该功能打开一个特定文件夹

LPCWSTR pszPathToOpen = L"C:\\Users\\strives";
PIDLIST_ABSOLUTE pidl;
if (SUCCEEDED(SHParseDisplayName(pszPathToOpen, 0, &pidl, 0, 0)))
{
    // we don't want to actually select anything in the folder, so we pass an empty
    // PIDL in the array. if you want to select one or more items in the opened
    // folder you'd need to build the PIDL array appropriately
    ITEMIDLIST idNull = { 0 };
    LPCITEMIDLIST pidlNull[1] = { &idNull };
    SHOpenFolderAndSelectItems(pidl, 1, pidlNull, 0);
    ILFree(pidl);
}
或者,您可以直接调用文件夹以运行其默认操作(通常在浏览器窗口中打开):

您可以使用该功能打开一个特定文件夹

LPCWSTR pszPathToOpen = L"C:\\Users\\strives";
PIDLIST_ABSOLUTE pidl;
if (SUCCEEDED(SHParseDisplayName(pszPathToOpen, 0, &pidl, 0, 0)))
{
    // we don't want to actually select anything in the folder, so we pass an empty
    // PIDL in the array. if you want to select one or more items in the opened
    // folder you'd need to build the PIDL array appropriately
    ITEMIDLIST idNull = { 0 };
    LPCITEMIDLIST pidlNull[1] = { &idNull };
    SHOpenFolderAndSelectItems(pidl, 1, pidlNull, 0);
    ILFree(pidl);
}
或者,您可以直接调用文件夹以运行其默认操作(通常在浏览器窗口中打开):


我相信OP需要一个包含子文件夹中文件的平面列表。@Anders我认为使用
ShellExecute
可以直接实现OP的预期效果,即直接打开Windows资源管理器。IIUC,这种方法只打开一个文件夹并显示其所有文件。这不是我需要的。我相信OP需要一个包含子文件夹中文件的平面列表。@Anders我认为使用
ShellExecute
可以直接实现OP的预期效果,即直接打开Windows资源管理器。IIUC,这种方法只打开一个文件夹并显示其所有文件。这不是我需要的。托管资源管理器窗口绝对是一个选项。我会调查的。托管一个浏览器窗口绝对是一个选择。我会调查的。