深度定义AutoCAD菜单,使用Alt 及系统保留的键盘快捷键,增强右键关联菜单!
本帖最后由 alan_cmh 于 2019-9-25 10:08 编辑深度定义AutoCAD菜单,使用Alt 及系统保留的键盘快捷键,增强右键关联菜单!
深海潜水多年,今天上来冒个泡,祝大家五一快乐!假期闲来无事,给大家说点自定义菜单的事儿,绝对原创,绝对实用!
Auotcad有一些默认的键盘加速快捷键,如F3键,Ctrl + 数字键1,2,3,Ctrl +字母键A ,S,P 等。但默认的快捷键很少,免不了要自己动手增加一些来提高工作效率。普通的定义快捷键,这里就不多说了。但AutoCAD本身对快捷键有些限制,辅助键只可以使用Ctrl ,Ctrl+Alt,Ctrl+Shift,Ctrl+Shift+Alt来配合某些字母键、数字键、功能键或虚拟键(如 F5 ,Insert ,NumPad7)等。受支持的虚拟键有:Escape 、Insert 、Delete 、Home、End 、Page Up 、Page Down 、左箭头、右箭头、上箭头和下箭头。
Escape 只能单独使用或与修饰符组合键 Ctrl+Shift+Alt 配合使用。不过windows7已经把Esc键占了,咱就不动它了。
个人经验,实际使用中,左手键盘右手鼠标比较有效率,对于左手操作,Ctrl ,Ctrl+Alt 配合其它键比较好按,Ctrl+Shift 一般,Ctrl+Shift+Alt 则按键太多令人抓狂,左手5根指头用4根,怎么按都别扭,估计很少人设置这个做快捷键,实在是不太方便使用,尤其是在右手不离开鼠标的前提下。之前用过一段时间AutoHook这个软件,可以允许在AutoCAD用一些奇怪的键盘组合(Alt,Shift等)来输出命令,尤其Alt 加左手几个字母和数字十分好用,但网上找到的可用版本,只支持到AutoCAD2007;论坛里之前也有人发一个ARX版本的类似插件,但现在过期不可用了。其实可以用一个绕弯子的办法,来突破限制,使用Alt 组合键及覆盖系统的一些保留快捷键。
找一个AutoCAD 2004或者05的菜单文件,名称是acad.mnu,用记事本打开,找到"***Accelerator"字段,可以看到以下内容:***ACCELERATORS ID_Hyperlink ^O^VID_SelAll ID_Copyclip ID_New ID_Open ID_Print ID_Save ID_Saveas ID_APP_EXITID_PasteclipID_Copybase ID_Pastebloc ID_Cutclip ID_Redo ID_U ID_Ai_propchID_CleanScreen ID_Content ID_SSMPalette ID_INFOPAL ID_MarkupMgr ID_TPalette ID_dbConnect ID_VBARun ID_VBAIDE +'_setvar;pickstyle;$M=$(if,$(eq,$(getvar,pickstyle),0),1,$(if,$(eq,$(getvar,pickstyle),1),0,+$(if,$(eq,$(getvar,pickstyle),2),3,2)))
其中带ID前缀的,如ID_Hyperlink是指的系统默认命令,方括号中间是启动此命令的快捷键,其实我们可以自己定义一个快捷键,不须理会ID段,现在我们来定义使用Ctrl+Alt+B启动“打断于点”命令,如:^C^C_break;\_f;\@;
OK,现在把Control+Alt换成Alt添加到acad.mnu菜单里,再多输入下面示例的几个命令快捷键,另存起来。请注意的是方括号后面的命令名称不要一样,因为后面系统会为同样的命令分配相同的ID,这个ID是系统为新命令自动建立的,比如,你想增加些Alt键快捷键,必须用不同的命令来占用ID位,方便以后修改,命令名称随便写都行,如下方的AltF1,AltF2,AltF3。至于方括号后所用到的特殊字符,请自行查阅帮助文件。方括号后面的命令,可以是简单的系统命令,可以是宏命令,可以控制工具栏或者切换界面元素,还可以是lisp程序命令(如下面的CenterLine),下面给出一些示例:
^C^C_break;\_f;\@;_Copy;^C^C_Xline;V;'_Osmode;6271;_Chprop;\;C;2;;^C^C_CenterLine;'_setvar;menubar;$M=$(if,$(eq,$(getvar,menubar),1),0,1)_-toolbar;user1;show;AltF1AltF2AltF3
保存下刚才编辑过的acad.mnu文件,回到AutoCAD,在命令行输入CUI,打开“传输”选项卡,点击右侧那个打开文件按钮,找到我们刚才保存的acad.mnu文件
http://bbs.mjtd.com/data/attachment/album/201204/29/113811g58eefjj16xae1ee.png
在右侧找到我们自己定义的那些快捷键,把它拖到左侧对应位置,
http://bbs.mjtd.com/data/attachment/album/201204/29/113814bh3mmwxexbxhnb1b.png
现在这几个Alt 快捷键就被传输到当前自己使用的菜单中了,回到自定义选项卡查看下,请注意,右侧的快捷键,不要尝试去修改它,AutoCAD不允许你定义Alt+B 这类快捷键,会自动删除掉,但是你不动它,也会被保存下来。至于其它栏,可以根据自己的需要去修改。下面有个元素ID是AutoCAD自动分配的,上面编辑acad.mnu菜单那一步,你如果偷懒快捷键定义不同,而命令相同的话,实际上分配到的ID是一样的,这时候再去修改这个命令,你会把所有相同ID的项目,全部修改成一样,从而无法实现不同的快捷键调用不同命令。
http://bbs.mjtd.com/data/attachment/album/201204/29/113818thqdxwppcf8swhqd.png
点击确定,保存当前修改,回到AutoCAD工作界面,试试刚才定义的快捷键吧,是不是搞定了!用这种移植传输的方法,可以为所欲为的覆盖修改部分AtuoCAD保留的快捷键,不是全部,有些键位仍然无效的,总体来说,够用了。本例在AutoCAD2012下操作, 理论上适用于2006到2013各个新版菜单系统 (这里向大家道歉,关于Alt键的调用,经本人64位win7测试,修改过2010-2013。2010测试不通过,2011,2012,2013,2014,2015,2016,2017,2018,测试通过,其它版本请各位测试后回贴通知,估计低版本通过的可能性不大。本贴介绍的其它菜单修改与增强不受AutoCAD版本限制)。但是,适可而止吧,多了估计你也记不住,咱的目的就是用上左手那几个Alt 快捷键,在使用键盘快捷键的时候,少伸2个指头!#%%*!@*T&^@$
09以后AutoCad界面发生了很大变化,加入了Ribbon界面,相对来说,Ribbon界面可以在相同的面积里显示比以前更多的命令,对新手是个好事,可以了解更多命令。但是这个界面对现在的宽屏显示器,尤其是笔记本是个恶梦,本来上下空间紧张,Ribbon还要占去好大块面积。还有些命令被分配在不同的标签下,要找到还要点击多次鼠标。Ribbon界面,Alt+数字键这几个,还是不要设置了,因为这几个是Ribbon界面的默认快捷键,会有冲突。另外,如果菜单开着的话,也会跟一些菜单快捷键冲突的,如下图,Alt+F,1,2,3,E,V,I,O,T,D,N,M,O,W,H,都被分别占用了,开着菜单,字母被占用,关了菜单,数字被占用,所以还是用刚才定义的 "Alt + Page up" 快捷键来隐藏掉菜单吧,对于熟悉命令行的老手来说,恐怕大多数都是隐藏甚至关了Ribbon界面和菜单,只打开一些必用的工具栏,使用键盘鼠标来干活的。所以没有Ribbon和菜单应该不是什么问题。一些Alt键,要关了菜单才好用。
http://bbs.mjtd.com/data/attachment/album/201204/29/11381916199qeiz979e7t3.png
有些人可能要说了,太麻烦了,我可以自定义acad.pgp文件,但是PGP文件里定义的简写命令,只能执行命令的第一步,而且还需要额外的空格键来确认命令的执行,而键盘加速键的好处在于是可以即时执行一系列命令动作的,包括响应外部的lisp程序,有些命令,做成lisp程序有点大材小用,放在关联对象菜单里却正好。AutoCAD的菜单是分好几个菜单组合在一起的,关联对象菜单部分是变化的,只对特定的图元起作用,如标注对象菜单只在选择标注的时候才出现,填充对象菜单只在选择填充的时候出现。下面的这个命令 ,我们可以把它定义在标注关联菜单中,快速将标注文本置中,如果用命令行方式来操作,恐怕很不方便.
_dimoverride;dimtix;1;;\;;
在命令列表里,点击新建命令按键,在右方特性区域名称栏里输入"&1. DTC ",在宏栏里输入"_dimoverride;dimtix;1;;\;;" ,然后将定义好的这个命令拖到上方的标注对象菜单里,点确定.
http://bbs.mjtd.com/data/attachment/album/201204/29/113824j6uegm3t1unf6t63.png
回到AutoCAD工作界面,选择一个文本不在标注线中间的尺寸,点击鼠标右键,可以看到刚才新建的标注关联菜单命令DTC,如下图,点一下“1.DTC”或者敲下左手键盘上的1,执行后,就会和下面的标注一样了标注文本被居中放置了。(&是个加速键符号,在菜单里,它后面跟的字符如果是1,那么菜单调用出来后,按1可以迅速调用DTC,你甚至都不需要移动鼠标去选择DTC)
http://bbs.mjtd.com/data/attachment/album/201204/29/1138208zt7xd11n1zd8n77.png
菜单的深度定制,我这里只做个引子,大家可自由发挥,合理配好&后面的快捷按键,会非常方便 。可以考虑修改增强的菜单有:
编辑菜单:用_Chprop更改对象线型,颜色,图层等; 标注对象菜单:加几个不同的标注显示或换算比例,更新,翻转箭头,添加解除关联,用dimoverride更改其它标注变量;填充对象菜单:直接在右键里,用-Hatchedit更改比例,角度,样式,AutoCAD自带填充样式的个人而言也就常用几种而已;添加实体编辑对象菜单;Shift + 右键改成正交切换,这样不用看键盘都能切换正交;捕捉菜单里放几个Osmode,加上极轴切换或者其它状态栏切换选项;
一些菜单里用得到的系统默认的宏,其它的自查帮助文件吧:
^O切换正交
^U 切换极轴
^D 切换动态USCS
^E 下一个等轴平面
如果实在懒得去找空默认菜单去编辑占位ID,我这里做好了一个现成的空的菜单,只包含快捷键部分,除了系统默认的,其它都有不存在的空命令占着,自己传输拖到菜单里,对于2006以前的版本,用记事本打开附件对比下自己的菜单文件,直接替换自己想改的部分就行了.
http://bbs.mjtd.com/thread-93473-1-1.html
上面的贴子里,有人问如何详细设置鼠标按钮,我把当时的回答也贴到这里来,可以参照下修改AutoCAD2006以前的菜单文件:
菜单文件里,鼠标右键配合功能键定义是分别设置的,Buttons2部分是定义Shift+右键,Buttons3是Ctrl+右键,Buttons4是Ctrl+Shift+右键,可以根据需要分别配置,每一行代码一个鼠标按钮,第一行是鼠标第二键:右键,第二行是鼠标第三键, 第三行是鼠标第四键,因手头没有多键鼠标,没有尝试太多,但对我只设置右键相关就足够用了。按你的需要,修改的时候,只改Button2部分为^O就可以切换正交了。另外,看下你的Button3设置里,有没有"$P0=SNAP $p0=*",这个是捕捉菜单代码,如果没有就把它加进去。
以下这个是我常用的鼠标按钮设置,修改了3个部分,Shift+右键是切换正交,Ctrl+右键是捕捉菜单,Ctrl+Shift+右键是切换极轴和对象捕捉追踪,可以参照下 :
***BUTTONS1
// Simple + button
// if a grip is hot bring up the Grips Cursor Menu (POP 500), else send a carriage return
// If the SHORTCUTMENU sysvar is not 0 the first item (for button 1) is NOT USED.
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,5),GRIP_),$P0=ACAD.GRIPS $P0=*);
$P0=SNAP $p0=*
^C^C
^B
^O
^G
^D
^E
^T
***BUTTONS2
// Shift + button
^O
***BUTTONS3
// Control + button
$P0=SNAP $p0=*
***BUTTONS4
// Control + shift + button
'_setvar;autosnap;$M=$(if,$(eq,$(getvar,autosnap),63),0,63)
客制化的门坎得花时间....
少有人愿意挤压其他时间出来进修
特别是没人作介绍引领时,面对官方资料,唉....
掘井到甘泉,多少个残灯孤影 可惜绝大多数人都不知道这些...
当年DOS/R12时代自定义菜单的重要可是不亚于编写LISP解决问题.
本帖最后由 aichong 于 2021-1-4 23:04 编辑
e2002 发表于 2014-6-11 23:11
官方自定义文档中一直都表明不能使用单独 Alt+"字母" 作为快捷键定义。
长期以来我一直也信以为真,似乎很 ...
其实,高版本CAD的cui界面里面默认有ALT+F8、ALT+F11的快捷键定义,应该也是采用楼主的方法定义的。但是你直接在cui里面改的话,CAD提示是不能修改的,比如将ALT+F8改为ALT+F9:
假如你将ALT+F8改为Shift+F8,则可以修改,但你再次将Shift+F8改为ALT+F8的话,CAD也是不允许改回来的了,出现上面的提示信息。因此,修改的时候最好备份一下相应的cuix文件,比如2020版的文件位于C:\Users\Administrator\AppData\Roaming\Autodesk\AutoCAD2020\R23.1\chs\Support\acad.CUIX。
================2005版本的acad.mnu的部分快捷键定义:
***ACCELERATORSID_VBARun ID_VBAIDE
支持,精彩,学习了,可以替换esc和f1么? Esc加其它Ctrl,Alt等,在win7里是被系统接管了,改不到的。
F1没有问题。 强烈顶起,占个位,学习了 楼主辛苦了 Shift + 右键改成正交切换怎么改? 鼠标右键不知道怎么写!? 本帖最后由 alan_cmh 于 2012-5-9 08:36 编辑
新建一个命令,在宏里面输入"^o ",然后把这个命令拖到Shift+单击>按钮2的位置,注意,默认的Shift+右键是对象捕捉菜单,菜单命令ID是MMU_002,不要直接改这里的宏,会把所有的其它相同ID的 菜单都改掉的,这样你就看不到捕捉菜单了。
本帖最后由 wowan1314 于 2012-5-10 10:56 编辑
谢谢,很详细,很有用,对追求快捷键的人帮忙很大。我左手两键组合好用的都用完了。
以后再加命令就加到ALT+字母上了。ALT要比shift好用的多啊。 鼠标右键也支持ALT就好了(而且SHIFT是中英文切换呢)。
话说ALT+字母在CAD2004中无法自定义啊! ??
技术贴呀.支持!