明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2148|回复: 3

[命令] 请问,如何接管autocad的热键?

[复制链接]
发表于 2011-3-24 11:00:44 | 显示全部楼层 |阅读模式
本帖最后由 ynioba 于 2011-3-24 11:25 编辑

我想在AutoCAD热键之前做点事情,例如,在saveas的时候...或者说,autocad在调用这个热键的时候,虽然还是这个命令,但是处理程序是我自己定义的.也不会去执行原有的同名命令...是不是要用后来的热键去覆盖??

ps:还有个问题,autocad是不是只能打开dwg扩展名结尾的文件,凡是不是这个扩展名结尾的,都直接提示找不到文件??
 楼主| 发表于 2011-3-24 11:03:13 | 显示全部楼层
本帖最后由 ynioba 于 2011-3-24 11:09 编辑

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=75730
我按照这篇文章的方法,貌似搞不定呀..
发表于 2011-3-24 14:45:28 | 显示全部楼层
using aApp = Autodesk.AutoCAD.ApplicationServices.Application;
aApp.DocumentManager.DocumentLockModeChanged += new DocumentLockModeChangedEventHandler(vetoCommand);
    static void vetoCommand(object sender, DocumentLockModeChangedEventArgs e)
    {
        switch (e.GlobalCommandName.ToLower())
        {
          case "properties":
            m_DbClick = false;
            e.Veto();
            break;
        }
    }
发表于 2020-9-26 23:11:06 | 显示全部楼层
  1. public class RegHotkey : IExtensionApplication
  2.     {
  3.         [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  4.         public static extern IntPtr GetForegroundWindow();
  5.         IntPtr myPtr = GetForegroundWindow();
  6.         public void Initialize()
  7.         {
  8.             IntPtr myPtr = GetForegroundWindow();
  9.             Hotkey hotkey = new Hotkey(myPtr);
  10.             Hotkey.Hotkey1 = hotkey.RegisterHotkey(Keys.F3, Hotkey.KeyFlags.MOD_NONE); //定义快键(Alt + F3) ,如果是hotkey.RegisterHotkey(System.Windows.Forms.Keys.F3, Hotkey.KeyFlags.MOD_NONE);//只注册F3
  11.             hotkey.OnHotkey += new HotkeyEventHandler(OnHotkey);
  12.             Editor ed = ap.DocumentManager.MdiActiveDocument.Editor;
  13.             ed.WriteMessage("注册成功");
  14.         }

  15.         //卸载方法
  16.         public void Terminate()
  17.         {
  18.            
  19.         }

  20.         public void OnHotkey(int HotkeyID) //设置热键的行为
  21.         {
  22.             Editor ed = ap.DocumentManager.MdiActiveDocument.Editor;
  23.             if (HotkeyID == Hotkey.Hotkey1)
  24.             {
  25.                 object obj = ap.GetSystemVariable("osmode");
  26.                 string os = obj.ToString();
  27.                 int os1 = Convert.ToInt32(os);
  28.                 ed.WriteMessage("捕捉到alt+F3。" + os1 + "\n");
  29.                 if (os1 == 0 || os1 == 16384)
  30.                 {
  31.                     ap.SetSystemVariable("osmode", 161);
  32.                     ed.WriteMessage("\n已设置为默认捕捉“端点、交点、垂足。”");
  33.                     return;
  34.                 }
  35.                 else if (os1 > 16384)
  36.                 {
  37.                     int os2 = os1 - 16384;
  38.                     ap.SetSystemVariable("osmode", os2);
  39.                     ed.WriteMessage("\n打开捕捉。");
  40.                     return;
  41.                 }
  42.             }
  43.         }
  44.     }
复制代码

我用这个试了一下,重新定义F3键,结果回调函数没响应,系统的F3键也没反应,哪位能帮忙看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:10 , Processed in 0.166888 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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