【模块仍在完善中,文档仍在编写中…】
在鼠标指针所在位置显示一个纵向菜单(效果类似于右键菜单),可用于执行或选择特定操作。
image.png
此菜单需要用鼠标点击,不支持键盘选择菜单项。
也可以使用网友 @Ceastld 分享的显示菜单的子程序(支持焦点和水平排列等功能)。参考动作:一个菜单

注意:

  • 鼠标或键盘的抬起事件会自动关闭菜单。根据使用方式,可能需要在显示菜单之前增加一些等待时间,以避免在点击动作后抬起鼠标时菜单被自动关闭的情况发生。(参考

    参数

    image.png
    【菜单数据】菜单的定义。
    支持四种类型的数据:

(1)类似于动作右键菜单定义的文本格式。
与动作右键菜单不同的是,动作右键菜单仅支持返回一个文本数据作为参数返回给动作。
这种方式只支持一级子菜单。

  1. ////注释内容。
  2. Ping百度|operation=run&data=ping baidu.com
  3. //// ----表示分隔符
  4. ----
  5. 只有Data的菜单(返回结果后使用)|只有data数据
  6. [fa:Light_Paste]粘贴内容(tooltip内容)|operation=paste&data=要粘贴的内容
  7. [+][fa:Light_Cog]二级菜单(提示内容...)
  8. [-][fa:Light_Save]发送按键Ctrl+S(模拟保存)|operation=sendkeys&data=^s
  9. [-][fa:Light_Paste]发送按键Ctrl+V(模拟保存)|operation=sendkeys&data=^v
  10. [fa:Light_Wrench:#f57e42]运行一个Quicker动作(tooltip内容)|operation=action&action=动作名称

说明:

  • //// 开始的内容为注释;
  • —— 为分隔符;
  • [+]开始的行为父菜单;
  • [-]开始的行为子菜单项;
  • 每一项通过分隔符(默认为“|”,可以在首行使用“|=新分隔符”的方式更改)分为标题部分和值部分。
  • 标题部分:遵循格式“[图标]标题(Tooltip内容)”,其中“[图标]”和“(Tooltip)”内容是可选的。
  • 内容部分:如果不需要执行操作,可以直接写菜单项的数据(分隔符|后面的内容整体作为模块输出)。如果需要执行操作,使用这样的格式:operation=操作类型&data=数据内容&action=要执行的动作。对于包含特殊字符的内容,需要进行URL编码才能正常传递。
  • 支持的operation类型请参考CommonOperationItem对象的文档说明。

(2)文本缩进格式
使用空格或tab缩进表示菜单层级。需Quicker版本1.34.27+

  • 只能使用空格或tab中的一种。
  • 可以使用一个或多个空格或tab表示缩进。
    1. [fa:Light_Paste]粘贴内容(tooltip内容)|operation=paste&data=要粘贴的内容
    2. [fa:Light_Cog]二级菜单(提示内容...)
    3. [fa:Light_Save]发送按键Ctrl+S(模拟保存)|operation=sendkeys&data=^s
    4. [fa:Light_Paste]发送按键Ctrl+V(模拟保存)|operation=sendkeys&data=^v
    5. 三级菜单
    6. [fa:Light_Cog]菜单1(提示内容...)
    7. [fa:Light_Wrench:#f57e42]运行一个Quicker动作(tooltip内容)|operation=action&action=动作名称
    image.png

(3)CommonOperationItem对象列表的JSON序列化文本。

  • 支持多级菜单。
  • IsSeparator=true时,表示是一条分割线。
  • 子菜单存放在Children属性中。

示例:

  1. [{
  2. "Title": "Ping baidu",
  3. "Description": "屏Ping百度",
  4. "Icon": "fa:Light_Pen",
  5. "Data": "ping baidu.com",
  6. "DataType": null,
  7. "Operation": "run",
  8. "Action": null,
  9. "IsSeparator": false,
  10. "OriginText": null,
  11. "ExtraData": null,
  12. "Children": null
  13. }, {
  14. "Title": null,
  15. "Description": null,
  16. "Icon": null,
  17. "Data": null,
  18. "DataType": null,
  19. "Operation": null,
  20. "Action": null,
  21. "IsSeparator": true,
  22. "OriginText": null,
  23. "ExtraData": null,
  24. "Children": null
  25. }, {
  26. "Title": "快搜",
  27. "Description": "屏Ping百度",
  28. "Icon": "fa:Light_Search",
  29. "Data": "",
  30. "DataType": null,
  31. "Operation": "action",
  32. "Action": "快搜",
  33. "IsSeparator": false,
  34. "OriginText": null,
  35. "ExtraData": null,
  36. "Children": null
  37. }, {
  38. "Title": "多级菜单",
  39. "Description": null,
  40. "Icon": "fa:Light_Search",
  41. "Data": "",
  42. "DataType": null,
  43. "Operation": null,
  44. "Action": null,
  45. "IsSeparator": false,
  46. "OriginText": null,
  47. "ExtraData": null,
  48. "Children": [{
  49. "Title": "Ping baidu",
  50. "Description": "屏Ping百度",
  51. "Icon": "fa:Light_Pen",
  52. "Data": "ping baidu.com",
  53. "DataType": null,
  54. "Operation": "run",
  55. "Action": null,
  56. "IsSeparator": false,
  57. "OriginText": null,
  58. "ExtraData": null,
  59. "Children": null
  60. }, {
  61. "Title": null,
  62. "Description": null,
  63. "Icon": null,
  64. "Data": null,
  65. "DataType": null,
  66. "Operation": null,
  67. "Action": null,
  68. "IsSeparator": true,
  69. "OriginText": null,
  70. "ExtraData": null,
  71. "Children": null
  72. }, {
  73. "Title": "快搜",
  74. "Description": "屏Ping百度",
  75. "Icon": "fa:Light_Search",
  76. "Data": "",
  77. "DataType": null,
  78. "Operation": "action",
  79. "Action": "快搜",
  80. "IsSeparator": false,
  81. "OriginText": null,
  82. "ExtraData": null,
  83. "Children": null
  84. }, {
  85. "Title": "多级菜单",
  86. "Description": null,
  87. "Icon": "fa:Light_Search",
  88. "Data": "",
  89. "DataType": null,
  90. "Operation": null,
  91. "Action": null,
  92. "IsSeparator": false,
  93. "OriginText": null,
  94. "ExtraData": null,
  95. "Children": [{
  96. "Title": "Ping baidu",
  97. "Description": "屏Ping百度",
  98. "Icon": "fa:Light_Pen",
  99. "Data": "ping baidu.com",
  100. "DataType": null,
  101. "Operation": "run",
  102. "Action": null,
  103. "IsSeparator": false,
  104. "OriginText": null,
  105. "ExtraData": null,
  106. "Children": null
  107. }, {
  108. "Title": null,
  109. "Description": null,
  110. "Icon": null,
  111. "Data": null,
  112. "DataType": null,
  113. "Operation": null,
  114. "Action": null,
  115. "IsSeparator": true,
  116. "OriginText": null,
  117. "ExtraData": null,
  118. "Children": null
  119. }, {
  120. "Title": "快搜",
  121. "Description": "屏Ping百度",
  122. "Icon": "fa:Light_Search",
  123. "Data": "",
  124. "DataType": null,
  125. "Operation": "action",
  126. "Action": "快搜",
  127. "IsSeparator": false,
  128. "OriginText": null,
  129. "ExtraData": null,
  130. "Children": null
  131. }, {
  132. "Title": "多级菜单",
  133. "Description": null,
  134. "Icon": "fa:Light_Search",
  135. "Data": "",
  136. "DataType": null,
  137. "Operation": null,
  138. "Action": null,
  139. "IsSeparator": false,
  140. "OriginText": null,
  141. "ExtraData": null,
  142. "Children": []
  143. }]
  144. }]
  145. }]

(4)CommonOperationItem列表对象。
例如,通过表达式生成操作菜单的列表。

  1. $=
  2. var items = new List<CommonOperationItem>(){
  3. new CommonOperationItem(){
  4. Title = "Ping baidu",
  5. Data="ping baidu.com",
  6. Icon="fa:Light_Pen",
  7. Operation="run",
  8. Description="屏Ping百度"},
  9. new CommonOperationItem(){ IsSeparator = true},
  10. new CommonOperationItem(){
  11. Title = "快搜",
  12. Data="",
  13. Icon="fa:Light_Search",
  14. Operation="action",
  15. Action="快搜",
  16. Description="屏Ping百度"},
  17. new CommonOperationItem(){
  18. Title = "多级菜单",
  19. Data="",
  20. Icon="fa:Light_Search",
  21. Children = new List<CommonOperationItem>(){
  22. new CommonOperationItem(){
  23. Title = "Ping baidu",
  24. Data="ping baidu.com",
  25. Icon="fa:Light_Pen",
  26. Operation="run",
  27. Description="屏Ping百度"},
  28. new CommonOperationItem(){ IsSeparator = true},
  29. new CommonOperationItem(){
  30. Title = "快搜",
  31. Data="",
  32. Icon="fa:Light_Search",
  33. Operation="action",
  34. Action="快搜",
  35. Description="屏Ping百度"},
  36. new CommonOperationItem(){
  37. Title = "多级菜单",
  38. Data="",
  39. Icon="fa:Light_Search",
  40. Children = new List<CommonOperationItem>(){
  41. new CommonOperationItem(){
  42. Title = "Ping baidu",
  43. Data="ping baidu.com",
  44. Icon="fa:Light_Pen",
  45. Operation="run",
  46. Description="屏Ping百度"},
  47. new CommonOperationItem(){ IsSeparator = true},
  48. new CommonOperationItem(){
  49. Title = "快搜",
  50. Data="",
  51. Icon="fa:Light_Search",
  52. Operation="action",
  53. Action="快搜",
  54. Description="屏Ping百度"},
  55. new CommonOperationItem(){
  56. Title = "多级菜单",
  57. Data="",
  58. Icon="fa:Light_Search",
  59. Children = new List<CommonOperationItem>(){
  60. }}
  61. }}
  62. }}
  63. };
  64. return items;

【字体大小】菜单文字字体大小。

【等待菜单关闭】是否等待菜单关闭后再执行后面的步骤

【失败后停止】在“等待菜单关闭”的情况下,未点击菜单时,是否停止动作。

输出参数

【是否成功】在“等待菜单关闭”的情况下,用户是否点击了菜单项。
【选择的菜单项数据】选择的菜单项的data参数。使用第一种格式设定菜单数据时,如果未指定data部分内容,则返回标题内容。
【选择的菜单项】选择的菜单项对应的CommonOperationItem对象。

示例动作

https://getquicker.net/Sharedaction?code=a2933deb-ebe7-4895-69d4-08d992b19cae

CommonOperationItem 对象

在Quicker内部用于表示一个通用的操作条目。其定义如下:

  1. public class CommonOperationItem
  2. {
  3. /// <summary>
  4. /// 标题文字,用于显示
  5. /// </summary>
  6. public string Title { get; set; }
  7. /// <summary>
  8. /// 描述文字,通常显示为tooltip
  9. /// </summary>
  10. public string Description { get; set; }
  11. /// <summary>
  12. /// 图标,格式请参考文档说明。
  13. /// </summary>
  14. public string Icon { get; set; }
  15. /// <summary>
  16. /// 数据内容
  17. /// </summary>
  18. public string Data { get; set; }
  19. /// <summary>
  20. /// 内部数据类型
  21. /// </summary>
  22. public string DataType { get; set; }
  23. /// <summary>
  24. /// 通常用于保存对Data内容的操作类型。
  25. /// <see cref="CommonOperationTypes">通用操作类型</see>
  26. /// </summary>
  27. public string Operation { get; set; }
  28. /// <summary>
  29. /// 要触发的动作id或名称
  30. /// </summary>
  31. public string Action { get; set; }
  32. /// <summary>
  33. /// 是否是分隔线
  34. /// </summary>
  35. public bool IsSeparator { get; set; }
  36. /// <summary>
  37. /// 从文本解析操作项时,被解析的原始文本
  38. /// </summary>
  39. public string OriginText { get; set; }
  40. /// <summary>
  41. /// 扩展数据
  42. /// </summary>
  43. public IDictionary<string, object> ExtraData { get; set; }
  44. /// <summary>
  45. /// 子项,也可做子菜单使用
  46. /// </summary>
  47. public IList<CommonOperationItem> Children { get; set; }
  48. }

支持的Operation类型:

  • copy:复制,将data中的内容复制到剪贴板。
  • paste:粘贴,将data中的内容复制到剪贴板后粘贴到当前窗口(模拟Ctrl+V)。
  • run:运行,将data作为命令执行。可以为文件、网址、命令等可以在Win+R窗口中运行的命令。
  • sendkeys:将data作为模拟按键B的内容模拟输入。
  • inputtext:模拟输入文本内容。
  • action:运行动作。此时通过Action参数给出动作ID或(没有重复的)名称。data中的内容作为参数传递给动作。
  • selectfile:在资源管理器中选择文件。

CommonOperationItem 支持如下的静态方法:

  • ParseLine:解析一行文本数据“[图标]标题(Tooltip)|operation=run&data=内容”,返回一个ComonOperationItem对象。
  • ParseLines:解析多行文本数据,返回CommonOperationItem的列表。不支持子项。
  • ParseLinesWithSubItems:解析多行文本数据,支持[+][-]前缀声明父项和子项。请参考本文档中菜单数据的第一种格式。