29/02/2020
Как временно заблокировать интерфейс AutoCAD при помощи .NET и C++
При длительных операциях с AutoCAD иногда возникает потребность заблокировать его интерфейс, чтобы не дать возможность пользователю изменять чертеж. В AutoCAD API специальных средств для этого нет, но можно воспользоваться Win32 API.Вот пример, как это можно сделать в .NET (https://www.keanw.com/2016/02/disabling-autocads-complete-ui-using-net.html) :
Код - C#: [Выделить]
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.Runtime;
- using System;
- using System.Runtime.InteropServices;
- namespace UserInterfaceManipulation
- {
- public class Commands
- {
- [DllImport("user32.dll")]
- static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
- [CommandMethod("DU")]
- public static void DisableUICommand()
- {
- EnableUI(false);
- }
- [CommandMethod("EU")]
- public static void EnableUICommand()
- {
- EnableUI(true);
- }
- public static void EnableUI(bool enable)
- {
- EnableWindow(Application.MainWindow.Handle, enable);
- }
- }
- }
Вариант с использованием ObjectARX и MFC:
Код - C++: [Выделить]
- static void DisableUI ()
- {
- CMDIFrameWnd *frame = acedGetAcadFrame();
- // Disable AutoCAD Frame, Ribbon, Toolbars, etc.
- frame->EnableWindow(FALSE);
- // Invoke progressbar
- acedSetStatusBarProgressMeter(_T("Loading My Critical Data"), 0, 10);
- for (int i = 0; i < 10; i++)
- {
- Sleep(1000); // Только для тестирования
- acedSetStatusBarProgressMeterPos(i);
- }
- acedRestoreStatusBar();
- // Enable AutoCAD Frame, Ribbon, Toolbars, etc.
- frame->EnableWindow(TRUE);
- }
Также можно воспользоваться функцией BlockInput();
Код - C++: [Выделить]
- BlockInput(true); // Блокирует клавиатуру и мышь
- BlockInput(false); // Разблокирует клавиатуру и мышь
В .NET это можно использовать через P/Invoke:
Код - C#: [Выделить]
- [return: MarshalAs(UnmanagedType.Bool)]
- [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
- public static extern bool BlockInput([In, MarshalAs(UnmanagedType.Bool)] bool fBlockIt);
Автор: Александр Ривилис
Опубликовано 29.02.2020
Отредактировано 29.02.2020 в 21:07:58
Опубликовано 29.02.2020
Отредактировано 29.02.2020 в 21:07:58