如何以编程方式打开特定'.exe'文件的JumpList窗口?

时间:2011-07-13 13:45:15

标签: c# .net windows-7

我知道如何为我的应用程序构建JumpList。但现在我想显示特定'.exe'文件的JumpList。我有一个'.exe'文件的路径,我需要显示此应用程序的JumpList。当用户在任务栏上单击应用程序图标上的鼠标右键时,会显示JumpList窗口,但我需要以编程方式显示此窗口。

5 个答案:

答案 0 :(得分:2)

从我做的小研究中,可以通过打开和阅读%AppData%\ Microsoft \ Windows \ Recent \ AutomaticDestinations中的文件内容来完成

其中的文件包含跳转列表文件的扩展名,通过读取这些文件,您可以通过检查重复发生的文件扩展名来找到包含所需应用程序的跳转列表的文件。通过了解要检索的应用程序的文件扩展名,您可以找到其跳转列表文件。当然,您可以使用注册表找到应用程序的文件扩展名。

编辑:第二次阅读你的帖子:原谅我,教你正在编写一个应用程序来替换windows任务栏。好吧,你的问题看起来很艰难。这些步骤可能有效:

  1. 获取桌面的屏幕截图,找到与该图标匹配的部分 您正在寻找的应用程序(可检索的) 编程)
  2. 从屏幕截图中减去或匹配图片以获取位置 在屏幕上
  3. 在屏幕上的该位置右键单击鼠标。
  4. ps:Windows 7的api code pack也可能有用。

答案 1 :(得分:2)

您可以使用Window Messages来执行此操作。您可以使用Spy++之类的工具来了解任务栏如何构建其子窗口等。一旦了解了它的工作原理,您很可能需要SetFocus并发送WM_MOUSECLICK之类的消息它。

如果每个按钮不是真正的按钮(只是一个绘制的'虚拟'按钮),您将需要使用一些数学来计算WM_MOUSECLICK的坐标(您可能需要试验{{} 1}}和WM_MOUSEDOWN)。请记住,任务栏可以锚定到桌面的不同边缘,也可以调整为16px按钮。

如果它听起来像黑客,那就是,我记得微软明确表示他们不会给开发人员这个级别的控制权与新的任务栏。

您可能会发现PInvoke Wiki对于获取WM_MOUSEUP定义非常有用。

我之前在XP(自定义开始菜单)中攻击了任务栏,所以这应该可以在Windows 7下进行。

答案 2 :(得分:1)

你可以使用库“Teststack.White”(简单的Nuget),然后使用这个

var desktop = Desktop.Instance;
var taskList = desktop.Get<ToolStrip>(SearchCriteria.ByClassName("MSTaskListWClass"));
var button = taskList.Get<Button>(SearchCriteria.ByText(Text));
button.RightClick();

答案 3 :(得分:0)

跳转列表是安全ui的一部分,您可以向列表添加选项,但显示列表本身必须是用户启动的,就像上下文菜单和鼠标点击一样

答案 4 :(得分:0)

老实说,我没有花太多时间在JumpLists上。

您是否在代码项目中看到此示例?它有很多好的信息。

http://www.codeproject.com/KB/WPF/MefFX.aspx

这篇文章已有几年历史了,但信息仍然不错。