我很想知道如何做与下面列出的应用程序相同的事情: 开始菜单计算器
我想知道如何在开始菜单搜索中创建自定义选项卡,然后使用我的 WPF 应用程序处理它。它应该只在我的应用程序运行之前启用。(就像计算器一样)
我阅读了一些有关windows API 代码包的内容并下载了它,但我不知道如何使用它。我搜索了它,但没有找到任何东西。(如果您知道如何使用 Windows API 代码包执行此操作,请编写一个示例来解释如何在 C# 中执行此操作)
主 exe“开始菜单 Calculator.exe”将 Windows 挂钩(使用SetWindowsHookEx)安装到 explorer.exe。该钩子在 SBLib.dll 中像往常一样实现,然后注入到 Windows Explorer 的内存空间中。
这个钩子搜索属于搜索框的窗口句柄。在此处查看有关此问题的讨论: 如何在 Windows 搜索文本框中获得“句柄”?并且可能是搜索框窗口的子类(如果你突然终止“开始菜单计算器.exe”进程,它也会使 Windows 资源管理器崩溃......这有点证实了这一点)
然后它对按键做出反应,我想它会破坏结果窗口。在Windows的层次结构中,我认为它是一个名为“桌面搜索打开视图”的窗口,您可以在“开始菜单”下使用SPY++访问它,除了上面msdn论坛中提到的窗口。
所以,这个漂亮的应用程序背后没有漂亮的 API。大量的黑客攻击 :-)
然而,我认为,使用记录在案的行为,与搜索框进行某种程度的集成是可能的。我没有进一步挖掘,但在 Windows 中存在联合搜索的概念(Windows 7 Federated Search)。我不知道这是否能够立即对用户输入的内容做出反应......
附带说明一下,如果您还在寻找一种从 C# 运行 javascript 代码的方法,那么这里有一个关于 SO 的问题说明了一切:parse and execute JS by C#
在制作开始菜单计算器时,我最初尝试使用联合搜索和托管 (.NET) 代码,但是您不能集成到开始菜单中,只能集成到 shell 搜索(用于基于 Web 服务的搜索,它允许您根据搜索返回自定义结果细绳)。问题是联合搜索的结构使得所有搜索数据都被预先索引,所以为了让计算器工作,我必须预先索引每个可能的计算!这一切都以这种方式工作的原因是确保单击开始菜单始终快速且响应迅速(您不希望每次在 shell 中按 start 时都会调用 Web 服务)。
我最终雇用了一个人来编写一个本地 Windows 应用程序,该应用程序将一个 IE 控件放入开始菜单搜索区域并将搜索到的文本与源一起传递。所有的视觉内容都只是 css,看起来像开始菜单渲染和在 javascript 中处理的计算。
所以是的,有点破解,但它似乎有效,到目前为止我还没有/听说过任何崩溃问题。