Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 21-02-2017, 14:02:33

Название: Перехват событий document или Application
Отправлено: Алексей (IdeaSoft) от 21-02-2017, 14:02:33
Подскажите. Стандартного события для отслеживания нажатия
кнопки для классов document или Application не нашел.
Как быть если мне нужно обработать событие нажатия клавиши в AutoCAD.

Хочу попробовать через функцию SetWindowsHookEx. Пока что-то не получается.

Код - C# [Выбрать]
  1.       [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWindowsHookEx", SetLastError = true)]
  2.         static extern IntPtr SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hMod, uint dwThreadId);
  3.  
  4. private delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
  5. ...
  6. IntPtr hMod = System.Runtime.InteropServices.Marshal.GetHINSTANCE(typeof(Autodesk.AutoCAD.ApplicationServices.Document).Module);
  7. hHook = SetWindowsHookEx(WH_KEYBOARD_LL, HookProcedure, hMod, 0)

Может кто сталкивался с подобной задачей.




Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 14:25:50
Про хуки здесь: http://adn-cis.org/zapret-vsplyivaniya-dialogovyix-okon-v-autocad.html
Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 14:27:31
Еще один вариант: http://adn-cis.org/kak-realizovat-windows-xuk-s-ispolzovaniem-acedregisterfilterwinmsg-v-.net.html
Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 14:34:06
Ну и в догонку: https://www.codeproject.com/articles/5038/using-hooks-from-c
Я использовал эти методы вот здесь: http://adn-cis.org/forum/index.php?topic=1868.msg7609#msg7609
Название: Re: Перехват событий document или Application
Отправлено: Алексей (IdeaSoft) от 21-02-2017, 15:12:44
Спасибо! Разобрался! Реально ответы помогли.
Название: Re: Перехват событий document или Application
Отправлено: Дмитрий Загорулькин от 21-02-2017, 15:39:41
А Application.PreTranslateMessage не поможет?
Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 16:07:33
А Application.PreTranslateMessage не поможет?
Когда-то обратил внимание, что далеко не все Windows'овские сообщения попадают в это событие. В том числе и клавиатурные.
Название: Re: Перехват событий document или Application
Отправлено: Дмитрий Загорулькин от 21-02-2017, 16:19:44
Я в одном из приложений использую это событие. За пару лет работы, вроде, никаких обращений от пользователей не было по поводу того, что не сработало что-то. Приложение отслеживает нажатие клавиш на клавиатуре (сам факт, без уточнения, какая клавиша нажата) и щелчки правой и левой кнопки мыши. В последней редакции еще добавил отслеживание перемещения мыши, пока отзывов не получал, тестируют.
Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 16:26:23
Это событие - аналог acedRegisterWatchWinMsg/acedRemoveWatchWinMsg в ObjectARX.
Здесь было обсуждение: https://forums.autodesk.com/t5/objectarx/how-to-ask-for-a-password-on-the-command-line-of-autocad-2013/m-p/3649184/highlight/false
Название: Re: Перехват событий document или Application
Отправлено: Дмитрий Загорулькин от 21-02-2017, 16:36:01
То есть, если я правильно понял, это событие дает сбои при вводе значений в командную строку? Что-то там как-то путано все и пестрит перекрестными ссылками :)
Название: Re: Перехват событий document или Application
Отправлено: Александр Ривилис от 21-02-2017, 16:38:26
Да. И причем еще зависит от типа "пристыковки" командной строки.
Название: Re: Перехват событий document или Application
Отправлено: Дмитрий Загорулькин от 21-02-2017, 16:45:01
Ну в моем приложении это не критично, но на будущее учту, спасибо!