使用 C# 搜索 Windows 开始菜单中的自定义搜索选项卡

本文关键字:搜索 自定义 选项 菜单 Windows 开始 使用 | 更新日期: 2023-09-27 18:37:06

我很想知道我怎样才能做与下面列出的应用程序相同的事情:开始菜单计算器

我想知道如何在"开始"菜单搜索中创建自定义选项卡,然后使用我的 WPF 应用程序处理它。 它应该只在我的应用程序运行之前启用。(就像计算器所做的一样)

我读了一些关于Windows API代码包的东西,我下载了它,但我不知道如何使用它。 我搜索了一下,但什么也没找到。(如果您知道如何使用Windows API代码包执行此操作,请编写一个示例来解释如何在C#中执行此操作)

使用 C# 搜索 Windows 开始菜单中的自定义搜索选项卡

  • 主exe"开始菜单计算器.exe"将Windows钩子(使用SetWindowsHookEx)安装到资源管理器.exe中。钩子在 SBLib 中像往常一样实现.dll然后将其注入 Windows 资源管理器的内存空间。

  • 此挂钩搜索属于搜索框的窗口句柄。在此处查看有关此内容的讨论:如何在 Windows 搜索文本框上获取"句柄"? 并且可能对搜索框窗口进行子类(如果您突然杀死"开始菜单计算器.exe"进程,它也会使 Windows 资源管理器崩溃......这有点证实了这一点)

  • 然后它会对按键做出反应,我想它会破坏结果窗口。在Windows的层次结构中,我认为它是一个名为"桌面搜索打开视图"的窗口,除了上面msdn论坛中提到的窗口外,您还可以在"开始菜单"下使用SPY++访问它。

因此,这个漂亮的应用程序背后没有好的API。大量的黑客攻击:-)

但是,我认为可以使用记录的行为与搜索框进行一定程度的集成。我没有进一步挖掘,但是Windows中存在联合搜索的概念(Windows 7 Federated Search)。我不明白这是否能够立即对用户输入的内容做出反应......

作为旁注,如果你也在寻找一种从 C# 运行 javascript 代码的方法,那么这里有一个关于 SO 的问题说明了一切:通过 C# 解析和执行 JS

制作"开始"菜单计算器时,我最初尝试使用联合搜索和托管 (.NET) 代码,但您无法集成到开始菜单中,只能集成到 shell 搜索中(对于基于 Web 服务的搜索,可让您根据搜索字符串返回自定义结果)。问题在于,联合搜索的结构使得所有搜索数据都预先编制了索引,因此为了使计算器正常工作,我必须预先索引每个可能的计算!这一切以这种方式工作的原因是确保单击开始菜单始终快速且响应迅速(您不希望每次在 shell 中按 Start 时都进行 Web 服务调用)。

我最终聘请某人编写一个本机Windows应用程序,该应用程序将IE控件放入"开始"菜单搜索区域,并将搜索的文本与源一起传递。所有的视觉内容都只是css,看起来像开始菜单渲染和javascript中处理的计算。

所以是的,有点黑客,但它似乎有效,到目前为止我还没有/听说过任何崩溃问题。