马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
How to implement a Windows Hook using acedRegisterFilterWinMsg in .NETBy Augusto Goncalves
It is possible setup a hook for Windows Messages, which is a low level event to capture when the system is performing almost any task, such as mouse movement or opening a dialog.
Inside AutoCAD there is a special method to do so, which do not interfere with its built-in behavior, but have the same features: acedRegisterFilterWinMsg
This method still implemented only on C++, so we need to use the DllImport attribute, which you might be familiar. For this specific case, it is also required the decorated name of this aced method, which can be obtained using the Dependency Walker tool.
// For AutoCAD 2013 64 bit // On previous versions, import from acad.exe (instead accore.dll) [DllImport("accore.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl, private static extern int acedRegisterFilterWinMsg( WindowHookProc callBackFunc); // hook message filter callback function [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int WindowHookProc( ref System.Windows.Forms.Message msg); private static int WindowsHook( ref System.Windows.Forms.Message msg) { // check the msg struct for whatever we want, // like keys, paint messages etc if (msg.Msg == ???) { // do something } return 0; } private static WindowHookProc callBackFunc = null; [CommandMethod("registerHook")] public static void CmdRegisterHook() { callBackFunc = new WindowHookProc(WindowsHook); acedRegisterFilterWinMsg(callBackFunc); }
|