Добрый день.
Предлагаю тут развивать тему скриптов AutoHotkey для базиса
Я ужа давно работаю в мебельщике с помощью PieMeny написанное на AutoHotkey. Ну и пару своих скриптов... Снял пару роликов на эту тему на ютьюбе. Кому интересно оставлю тут ссылочки
и
Интересно может кто-то еще использует AutoHotkey в работе? Хотелось бы посмотреть примеры использования.
Я попробовал выложить на гугл диск актуальную версию из второго видео, но гугл диск почему-то считает этот архив зло пакостным поэтому если кому надо пишите в телеграмме(@BNikitaG) поделюсь
Последний раз редактировалось Uncle; 05.10.2021 в 16:45..
Причина: ссылка на актуальную версию
На практике, достаточно долго ищет, до нескольких секунд при большом количестве файлов.
Проверено в 8н.
Пути конечно нужно прописать свои.
Скрытый текст
PHP код:
#SingleInstance Force #Persistent #NoEnv #UseHook SetBatchLines -1 ListLines Off #KeyHistory 0 ; #ErrorStdOut ; #NoTrayIcon SetWorkingDir %A_ScriptDir%
; ___________________________ Body _________________________________________________
#If WinActive("ahk_exe Bazis_.exe")
1:: If Bazis_SelectPath.Get() Bazis_SelectPath.Select("Scripts\Папки\Выделение") Return 2:: If Bazis_SelectPath.Get() Bazis_SelectPath.Select("Scripts\Папки\Ящик") Return 3:: If Bazis_SelectPath.Get() Bazis_SelectPath.Select("Scripts") Return
for i, child in Acc_Children(Acc) { If Acc.accValue(child) = Match && Acc.accName(child) = oPath[Match + 1] { If (Match = oPath.Count() - 1) { Acc.accSelect(0x00000002, child) this.MouseMove(1, 1, 0) Sleep 30 ControlSend, , {Enter}, % "ahk_id " this.TreeView Break } ++Match } } this.MouseMem(1, 0) } MouseMem(Set = 0, Speed = 0) { Static x, y S_CoordModeMouse := A_CoordModeMouse CoordMode, Mouse, Screen If Set this.MouseMove(x, y, Speed) Else { MouseGetPos, x, y this.X_Start := x, this.Y_Start := y } CoordMode, Mouse, %S_CoordModeMouse% } MouseMove(X, Y, s := 1) { CoordMode, Mouse, Screen MouseMove, X, Y, %s% } MsgBox(Text, Title = "", Options = "", Timeout = "") { MsgBox, % Options, % Title, % Text, % Timeout } }
; ___________________________ Acc.ahk Standard Library _________________________________________________
; http://www.autohotkey.com/board/topic/77303-acc-library-ahk-l-updated-09272012/ ; https://dl.dropbox.com/u/47573473/Web%20Server/AHK_L/Acc.ahk ;------------------------------------------------------------------------------ ; Acc.ahk Standard Library ; by Sean ; Updated by jethrow: ; Modified ComObjEnwrap params from (9,pacc) --> (9,pacc,1) ; Changed ComObjUnwrap to ComObjValue in order to avoid AddRef (thanks fincs) ; Added Acc_GetRoleText & Acc_GetStateText ; Added additional functions - commented below ; Removed original Acc_Children function ; last updated 2/25/2010 ;------------------------------------------------------------------------------
Acc_Init() { Static h If Not h h:=DllCall("LoadLibrary","Str","oleacc","Ptr") } Acc_ObjectFromEvent(ByRef _idChild_, hWnd, idObject, idChild) { Acc_Init() If DllCall("oleacc\AccessibleObjectFromEvent", "Ptr", hWnd, "UInt", idObject, "UInt", idChild, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0 Return ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt") }
Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "") { Acc_Init() If DllCall("oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0 Return ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt") }
Пример AHK-cкрипта для тех, кому требуется часто и быстро поменять стиль размеров и выносок в режиме чертежа.
В примере:
Ctrl+Shift+Alt+R хоткеи для вызова окна Параметры размеров.
!1 - Alt+1 хоткеи для настроек №1
!2 - Alt+2 хоткеи для настроек №2 - особенность, включается настройка "Применить ко всем текущим размерам".
!3 - Alt+3 хоткеи для настроек №3 - особенность, включается Курсив, использую для выносок.
Скрытый текст
PHP код:
#singleInstance Force #IfWinActive, БАЗИС-Мебельщик ;Название окна программы
!1:: ;Вызываем параметры размеров Alt+1 Send ^+!{sc13} ; Ctrl+Shift+Alt+R хоткеи Параметры размеров winwait, ahk_class TFormParRazm qS = 2 ;Задаем размер стрелок qT = 2,5 ;Задаем высоту надписи Sleep 200 Control, Uncheck,, TCheckBox2 ;Снимаем чек с курсива Sleep 20 ;Подобрать паузу Control, Uncheck,, TCheckBox3 ;Снимаем чек для замены всем размерам Sleep 20 ;Подобрать паузу Control, Check,, Edit1 Sleep 20 ;Подобрать паузу Control, EditPaste, %qS%, Edit1 ;Меняем размер стрелок Send {Enter} Sleep 10 ;Подобрать паузу Control, Check,, Edit2 Sleep 20 ;Подобрать паузу Control, EditPaste, %qT%, Edit2 ;Меняем высоту надписи Sleep 10 ;Подобрать паузу Send {Tab 3}{Enter} Return
!2:: ;Вызываем параметры размеров Alt+2 Send ^+!{sc13} ; Ctrl+Shift+Alt+R хоткеи Параметры размеров winwait, ahk_class TFormParRazm qS = 4 ;Задаем размер стрелок qT = 4 ;Задаем высоту надписи Sleep 200 Control, Uncheck,, TCheckBox2 ;Снимаем чек с курсива Sleep 20 ;Подобрать паузу Control, Check,, TCheckBox3 ;Ставим чек для замены всем размерам Sleep 20 ;Подобрать паузу Control, Check,, Edit1 Sleep 20 ;Подобрать паузу Control, EditPaste, %qS%, Edit1 ;Меняем размер стрелок Send {Enter} Sleep 10 ;Подобрать паузу Control, Check,, Edit2 Sleep 20 ;Подобрать паузу Control, EditPaste, %qT%, Edit2 ;Меняем высоту надписи Sleep 10 ;Подобрать паузу Send {Tab 3}{Enter} Return
Запуск меню по F1.
Проверено в 8н.
Пути конечно нужно прописать свои.
Ускорил работу, если 90 папок, находит за 1 секунду (на видео папка "ящик" 93я по счёту).
Добавил меню, пример с хоткеями оставил в комментарии.
Для работы в других папках "Скрипты" надо заменить на "Фрагменты", "Фурнитура" (см. массив Compliance).
Кнопка "Назад" не работает, если была смена дерева, например с "Фрагменты" на "Фурнитура".
А вы давно это используете?
Просто порядковый номер контрола (у вас это 6 или 7) у меня другой, и от запуска к запуску могут меняться.
Как-то раньше не замечал.
Сейчас протестировал и вот какая штука вырисовывается.
Если запустить БМ (у меня 2021.9.2, на работе 11) и сначала открыть модель, а потом чертеж - то адреса 6 и 7. А если открыть БМ и сначала запустить чертеж - то адреса меняются на 4 и 5. НО, если потом открыть модель, ТО в чертежах все становится на свои места!
Похоже есть какие-то приоритеты раздачи номеров при запуске. Что первым открылось, тому и номерки поменьше.
UPD^
А вот какая штука вырисовывается, при дальнейших исследованиях:
Код HTML:
<!--Слои в чертежах, если открыть до модели:-->
ClassNN: TSpTBXComboBox4 HWND: 0x80312
<!--Виды в чертежах, если открыть до модели:-->
ClassNN: TSpTBXComboBox5 HWND: 0x902d6
<!--Слои в чертежах, если открыть после модели:-->
ClassNN: TSpTBXComboBox6 HWND: 0x80312
<!--Виды в чертежах, если открыть после модели:-->
ClassNN: TSpTBXComboBox7 HWND: 0x902d6
То есть, номера Control'ов меняются, а HWND - остаются прежними.
HWND из Wiki
Чтобы указать контрол через его HWND (window handle, идентификатор окна), оставьте параметр Control пустым и задайте ahk_id %ControlHwnd% как значение параметра WinTitle - это работает также и для скрытых контролов, даже если обнаружение скрытых окон (команда DetectHiddenWindows) не включено. HWND, как правило, узнаётся через команды ControlGet Hwnd, MouseGetPos или DllCall.
[свернуть]
Осталось только разобраться и протестить.
UPD2^
Использование HWND ни к чему не привело, так как с каждым запуском оно другое. Остаются лишь постоянными 6 и 7, или 4 и 5 - в зависимости от того что вперед было запущено.
Последний раз редактировалось skromvit; 18.01.2022 в 00:00.
Причина: Дополнение
То есть, номера Control'ов меняются, а HWND - остаются прежними.
Просто меняется родительская иерархия.
Цитата:
Сообщение от skromvit
Остаются лишь постоянными 6 и 7, или 4 и 5
Это плохое решение, и вы будете периодически сталкиваться с неработоспособностью, например при изменении рабочего стола.
Например, если надо найти нужный TSpTBXComboBox, то можно в начале найти его родителя - TSpTBXToolbar с текстом "Слои", и в нём искать TSpTBXComboBox. Причём если его искать относительно TSpTBXToolbar, а не всего окна, то в нём индекс будет всегда одинаков.