ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1515|回复: 3

Ribbon快捷键问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-18 15:02 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yang0026 于 2019-6-18 15:05 编辑

VSTO中,想实现按某个组合快捷键,打开指定的窗体。VBA中很简单,用 application.onkey 调用某个宏就行。VSTO现在用C#做,网上找了个快捷键的方法,如下,但是只能在窗体里用,就是在ribbon上点击按钮打开窗体后后,可以用这段代码设置某些操作的快捷键,但是我想要打开窗体的快捷键,就是在窗体还没打开的时候就注册快捷键。我把HotKey.RegisterHotKey放在Ribbon.cs的Ribbon_Load里,把override void WndProc这个函数放Ribbon.cs里,会报错。有什么其他的解决办法么?

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. using System.Windows.Forms;

  5. namespace xxx

  6. {
  7.      class HotKey
  8.      {

  9.          //如果函数执行成功,返回值不为0。
  10.          //如果函数执行失败,返回值为0。要得到扩展错误信息,调用GetLastError。
  11.          [DllImport("user32.dll", SetLastError = true)]

  12.          public static extern bool RegisterHotKey(
  13.              IntPtr hWnd,                 //要定义热键的窗口的句柄
  14.              int id,                      //定义热键ID(不能与其它ID重复)         
  15.              int fsModifiers,    //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
  16.              Keys vk                      //定义热键的内容
  17.              );
  18.          [DllImport("user32.dll", SetLastError = true)]
  19.          public static extern bool UnregisterHotKey(
  20.              IntPtr hWnd,                 //要取消热键的窗口的句柄
  21.              int id                       //要取消热键的ID
  22.              );
  23.          //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)

  24.          [Flags()]
  25.          public enum KeyModifiers
  26.          {
  27.              None = 0,
  28.              Alt = 1,
  29.              Ctrl = 2,
  30.              Shift = 4,
  31.              WindowsKey = 8
  32.          }
  33.      }
  34. }

  35. private void Form_Load(object sender, EventArgs e)

  36. {

  37.     //注册热键Shift+S,Id号为100。HotKey.KeyModifiers.Shift也可以直接使用数字4来表示。
  38.     HotKey.RegisterHotKey(Handle, 100, HotKey.KeyModifiers.Shift, Keys.S);
  39.     //注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
  40.     HotKey.RegisterHotKey(Handle, 101, HotKey.KeyModifiers.Ctrl, Keys.B);
  41.     //注册热键Alt+D,Id号为102。HotKey.KeyModifiers.Alt也可以直接使用数字1来表示。
  42.     HotKey.RegisterHotKey(Handle, 102, HotKey.KeyModifiers.Alt, Keys.D);

  43. }

  44. //在FormA的Leave事件中注销热键。

  45. private void Form_Closed(object sender, EventArgs e)

  46. {
  47.     //注销Id号为100的热键设定
  48.     HotKey.UnregisterHotKey(Handle, 100);
  49.     //注销Id号为101的热键设定
  50.     HotKey.UnregisterHotKey(Handle, 101);
  51.     //注销Id号为102的热键设定
  52.     HotKey.UnregisterHotKey(Handle, 102);

  53. }

  54. ///
  55. /// 监视Windows消息
  56. /// 重载WndProc方法,用于实现热键响应
  57. ///
  58. ///
  59. protected override void WndProc(ref Message m)
  60. {
  61.      const int WM_HOTKEY = 0x0312;
  62.      //按快捷键
  63.      switch (m.Msg)
  64.      {
  65.          case WM_HOTKEY:
  66.              switch (m.WParam.ToInt32())
  67.              {
  68.                  case 100:     //按下的是Shift+S
  69.                      //此处填写快捷键响应代码        
  70.                      break;
  71.                  case 101:     //按下的是Ctrl+B
  72.                      //此处填写快捷键响应代码
  73.                      break;
  74.                  case 102:     //按下的是Alt+D
  75.                      //此处填写快捷键响应代码
  76.                      break;
  77.              }
  78.          break;
  79.      }
  80.      base.WndProc(ref m);
  81. }
复制代码

复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-25 09:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
后来找了个暂时解决的办法,自启动一个窗体,启动后隐藏,注册快捷键和重写方法都放那个窗体里

TA的精华主题

TA的得分主题

发表于 2019-8-2 17:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-11-12 08:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 12:54 , Processed in 0.037977 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表