- 积分
- 13757
- 明经币
- 个
- 注册时间
- 2007-1-15
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 print1985 于 2021-4-4 12:17 编辑
- (vl-load-com);加载VL函数
- ;以下为自动加载dll代码,修改为你的AganInp.dll路径(注意路径为双斜杠)
- (vl-cmdf "netload" "D:\\Program Files\\Autodesk\\AutoCAD 2014\\Support\\AganInp.dll")
- ;反应器,加载lisp后即运行
- (vlr-command-reactor nil '((:vlr-commandEnded . GL:changeen) ;command命令完成后切换为英文
- (:vlr-commandCancelled . GL:changeen) ;command命令取消后切换为英文
- (:vlr-unknownCommand . GL:changeen) ;command输入未知命令后切换为英文
- ))
- (defun GL:changeen(a b)
- (GC:changeen T) ;C#切换输入法为英文
- (princ)
- )
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.EditorInput;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using System;
- using System.Runtime.InteropServices;
- namespace inputting
- {
- public class inputting
- {
- [DllImport("user32.dll")]
- public static extern IntPtr FindWindow(string ClassName, string WindowName);//窗口句柄
- [DllImport("user32.dll")]
- public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);//线程
- [DllImport("user32.dll")]
- public static extern int GetKeyboardLayout(int threadid);//键盘布局(输入法)
- //[DllImport("user32.dll")]
- //public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);//模拟按键用
- [LispFunction("GC:changeen")] //lisp调用函数名字
- public static ResultBuffer qhenus(ResultBuffer rb)
- {
- if (rb == null) return null;
- TypedValue[] values = rb.AsArray();//返回值为数组,相当于lisp里面的表list
- Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
- IntPtr cadhwnd = FindWindow(null, null);//窗口句柄
- int cadID = 0;
- int threadid = 0;
- threadid = GetWindowThreadProcessId(cadhwnd, out cadID);
- int num = GetKeyboardLayout(threadid);//取得一个句柄,描述指定应用程序的键盘布局,经比较中文输入法都小于0
- if (cadhwnd != IntPtr.Zero)
- {
- if (num < 0)
- {
- //API切换输入法为英文
- System.Windows.Forms.InputLanguage.CurrentInputLanguage =
- System.Windows.Forms.InputLanguage.FromCulture(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
- /* 也可用模拟按键切换 ctrl+空格
- //模拟按下ctrl键
- keybd_event(0x11, 0, 0, 0);
- //模拟按下空格键
- keybd_event(0x20, 0, 0, 0);
- //模拟松开ctrl键
- keybd_event(0x11, 0, 2, 0);
- //模拟松开空格键
- keybd_event(0x20, 0, 2, 0);
- ed.WriteMessage("已切换");
- */
- }
- }
- else
- {
- ed.WriteMessage("未找到CAD窗口,输入法自动切换失败");
- }
- return null;
- }
- }
- }
自动切换输入法有很多种,我也凑热闹弄了个超简单的输入法切换给大家玩,源码源码
功能:在CAD命令结束时自动切换为英文输入法,妈妈再也不用担心忘记切换输入法了,soeasy!
我的测试环境:win7 64位 CAD2020、CAD2014
个人能力有限,更多功能大家共同开发,谢谢大家!
C#代码只做了个框架,可以增加内容,当然也可以精简优化,即使不做任何修改也是完全能用的。
lisp+c#混合编程只是为大家提供一个编程的思路,有lisp基础的童鞋简单学习一下C#,混合编程能做出 一些纯lisp很难实现的功能
现在明经上传不了附件,编译好的DLL文件可以到晓东下载http://bbs.xdcad.net/thread-727562-1-1.html
新版本:http://bbs.mjtd.com/thread-183157-1-1.html
|
评分
-
查看全部评分
|