02.10.2021, 17:36
Базис + AutoHotkey
Bystry
Новичок
Регистрация: 02.11.2018
Сообщений: 16
Сказал(а) спасибо: 5
Поблагодарили 22 раз(а) в 3 сообщениях
02.10.2021, 17:36
Рейтинг:
()
Добрый день.
Предлагаю тут развивать тему скриптов AutoHotkey для базиса
Я ужа давно работаю в мебельщике с помощью
PieMeny написанное на AutoHotkey. Ну и пару своих скриптов... Снял пару роликов на эту тему на ютьюбе. Кому интересно оставлю тут ссылочки
VIDEO и
VIDEO
Интересно может кто-то еще использует AutoHotkey в работе? Хотелось бы посмотреть примеры использования.
Официальный сайт | Русскоязычная документация
Я попробовал выложить на гугл диск актуальную версию из второго видео, но гугл диск почему-то считает этот архив зло пакостным поэтому если кому надо пишите в телеграмме(@BNikitaG) поделюсь
Последний раз редактировалось Uncle; 05.10.2021 в 16:45 ..
Причина: ссылка на актуальную версию
Просмотров: 65065
20 пользователя(ей) сказали cпасибо:
09.10.2021, 12:02
#31
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
Цитата:
Сообщение от
toucaner
выбора иконок, настройки путей
В Radial Menu v4 это есть, пользуйтесь.
Цитата:
Сообщение от
toucaner
А написать какой то простейший интерфейс для выбора иконок, настройки путей и тп какая то сложная и не посильная задача, это возможно ?
Задача не тривиальная, на это потребуется много времени. В случае моего кода, следующий этап, это улучшение внешнего вида.
Если вам это очень нужно сейчас, то разобраться в этом на примере создания меню из 8 пунктов:
PHP код:
Menu . Option ({ name : "Keys" , fontstyle : "Comic Sans MS" , MarkerBorder : 5 , SubMenuBorder : 3
, BlockMouse : 2 , RightClickClose : 2 , ClickNoClose : 1 , ClipCursor : 1 , SelectedEmpty : 1 , ReturnMouse : 2
, textcolor : "000000" , margin : 22 , wside : 140 , hside : 80 , col : 3 , fontsize : 16 })
Menu . Add ( { text : "AAAAAA`nBBBBBBB`nCCCCCCCC"
, func : Func ( "MsgBox" ). Bind ( "MsgBox 1" , , 0x42000 , 0.6 )
, bckgpic : "D:\Images\Icons&Avatar\ICO\1ICONs=\76.ico"
, bckgbckgpic : 1
, picalign : "Right"
, fontsize : 12
, picfill : 0
, align : "Left" })
Menu . Add ( { text : "AAAAA`nBBBBBB`nCCCCCCC"
, bckgpic : "Shell32.dll"
, bckgbckgpic : 1
, icon : 32
, picalign : "Left"
, align : "Right"
, fontsize : 12
, func : Func ( "MsgBox" ). Bind ( "MsgBox 2" , , 0x42000 , 0.6 ) })
Menu . Add ( { text : "3"
, bckgpic : "D:\Images\Icons&Avatar\ICO\1ICONs=\76.ico"
, bckgbckgpic : 1
, fontsize : 64
, func : Func ( "MsgBox" ). Bind ( "MsgBox 3" , , 0x42000 , 0.6 )})
Menu . Add ( { text : "4"
, bckgpic : "..\pics\colortexture.jpg"
, picfill : 1
, fontsize : 36
, textcolor : "ffffff"
, func : Func ( "MsgBox" ). Bind ( "MsgBox 4" , , 0x42000 , 0.6 ) })
Menu . Add ( { startarea : 1 })
Menu . Add ({ text : "Панель" , bckgcolor : "389AE8" , func : Func ( "ToolTip" ). Bind ( "" ) } )
Menu . Add ( { text : "Menu" , bold : 1000 , fontsize : 24 , bckgcolor : "FFDE8B" , func : "SubMenu:Option" } )
Menu . Add ({ text : "Показать`nлинии" , bckgcolor : "f4f4f4" , align : "Center" , spam : 0 , func : Func ( "ToolTip" ). Bind ( "" ) })
Menu . Add ({ text : "" , bckgpic : "Shell32.dll" , bckgcolor : "2A211C" , bckgbckgpic : 0 , icon : 269 , HideAction : 1 , func : Func ( "ToolTip" ). Bind ( "" )} )
Menu3 := new Menu ()
для вас какая то сложная и не посильная задача, это возможно ?
Добавлено через 17 минут
Вот ссылка на файл с минимальным кодом. Меню запускается по кнопке "1" и "2". Во всём что после "Class Menu 14:47 06.10.2021" разбираться не надо.
Пользователь сказал cпасибо:
14.10.2021, 23:01
#32
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
Освежу тему популяризации АНК, суть сего - "разное по одной кнопке в зависимости от того что под курсором мыши" и только при условии активности окна Базиса.
Видео
VIDEO
Тут по кнопке F2, если мышь находится над любой из панелей управления - разворачивает или сворачивает её. Если над редактором скриптов - показывает или скрывает его. Если на модели - выделяет (или отменяет выделение) родительский блок (не как при выключенном "Выделение элементов внутри блоков", а именно родительский). Полноэкранный режим по F12.
3 пользователя(ей) сказали cпасибо:
30.12.2021, 11:11
#33
Местный
Регистрация: 22.12.2008
Сообщений: 276
Сказал(а) спасибо: 55
Поблагодарили 245 раз(а) в 178 сообщениях
Вес репутации:
265
Сдвиг и поворот + F6
Полезный скрипт, для тех кто использует F6.
Подхватывает выделенное вызывая окно смещения.
Autohotkey
PHP код:
#singleInstance force #ifWinActive БАЗИС-Мебельщик 11 ;здесь название и версия БМ ;-- Сдвиг и поворот + Сместить курсор -- sc2C & sc2D :: ; нажатие сочетания кнопок Z + X Send ^{ sc32 }{ Enter } ; Ctrl + M - здесь сочетание горячих клавиш в БМ на Сдвиг и поворот Sleep 10 Send { F6 } ; F6 - здесь горячая клавиша в БМ на Сместить курсор Return
[свернуть]
Если перемещение нужно с шагом стрелками
Autohotkey
PHP код:
#singleInstance force #ifWinActive БАЗИС-Мебельщик 11 ;здесь название и версия БМ ;-- Сдвиг и поворот -- sc2C & sc2E :: ; нажатие сочетания кнопок Z + С Send ^{ sc32 }{ Enter } ; Ctrl + M - здесь сочетание горячих клавиш в БМ на Сдвиг и поворот Return
[свернуть]
2 пользователя(ей) сказали cпасибо:
30.12.2021, 12:37
#34
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
Замена F6
В данном коде окно вызывается по кнопке F1.
Если кнопку направления выбрать правой кнопкой, то перед смещением будет нажатие Enter, это два последних смещения в видео.
Также удобно с резиновой нитью. Такой способ гарантирует то что перед вызовом окна не будет смещения курсора.
Поддерживает ввод выражений с + - / * ()
Проверено только в 8ке.
14:05 30.12.2021
Добавил поддержку второго монитора.
15:19 30.12.2021
Добавил по F2 пример с "Сдвиг и поворот".
Код
Код:
#SingleInstance Force
#Persistent
#NoEnv
#If WinActive("ahk_class TFormMain ahk_exe Bazis_.exe")
F1:: Bazis_Shift.Go()
; по F2 сначала нажимается "Ctrl+M" Сдвиг и поворот, после при выборе правой кнопкой, будет смещение объектов.
F2::
SendInput {LCtrl Down}{sc32}{LCtrl Up} ; LCtrl + "M" Сдвиг и поворот
Bazis_Shift.Go({Escape: 1}) ; Escape - после действия будет нажато Escape
Return
#If
class Bazis_Shift
{
/*
Singleton - Bazis_Shift 15:14 30.12.2021
https://promebelclub.ru/forum/showthread.php?p=512760#post512760
*/
Go(com = "") {
this.hActive := WinExist("A")
this.MouseMem()
for k, v in com
this[k] := v
If !this.Start
{
DetectHiddenWindows, On
this.BSize := 66
this.Start := 1
this.Hotkey_Enter := "~RButton Up"
this.fOnButtonDown := ObjBindMethod(this, "OnButtonDown")
this.fDo := ObjBindMethod(this, "Do")
this.fExit := ObjBindMethod(this, "Exit")
this.fEnter := ObjBindMethod(this, "Enter")
Gui, New
Gui, -Caption +AlwaysOnTop +hwndhGui
this.hGui := hGui
Gui, Margin, 0, 0
Gui, Color, 409BE0
Gui, Font, % "s" this.BSize // 2
Gui, Add, Edit, % "Center x0 y0 w" this.BSize * 3 " h" this.BSize " hwndhShift", 100
this.hShift := hShift
Gui, Add, Button, % "Center x" this.BSize " y+0 w" this.BSize " h" this.BSize " hwndhUp", % Chr(0x21D1)
Gui, Add, Button, Center x0 y+0 wp hp Section hwndhLeft, % Chr(0x21D0)
Gui, Add, Button, % "Center x+" this.BSize " yp wp hp hwndhRight", % Chr(0x21D2)
Gui, Add, Button, % "Center xs+" this.BSize " y+0 wp hp hwndhDown", % Chr(0x21D3)
this.Dir := {hUp+0:"Up", hLeft+0:"Left", hRight+0:"Right", hDown+0:"Down"}
this.GuiControl(this.hGui ": +g", hUp, this.fDo)
this.GuiControl(this.hGui ": +g", hLeft, this.fDo)
this.GuiControl(this.hGui ": +g", hRight, this.fDo)
this.GuiControl(this.hGui ": +g", hDown, this.fDo)
Gui, New
Gui, % "+hwndhBlockGui +Owner -Caption +AlwaysOnTop +E" WS_EX_NOACTIVATE := 0x08000000
this.hBlockGui := hBlockGui
Gui, Color, 0xffffff
WinSet, TransParent, 1, ahk_id %hBlockGui%
WinSet, TransColor, 409BE0, ahk_id %hGui%
Gui, % this.hGui ": Show", Hide
Gui, % this.hBlockGui ": Show", Hide
WinGetPos, WinX, WinY, WinWidth, WinHeight, % "ahk_id" this.hGui
this.WinWidth := WinWidth
this.WinHeight := WinHeight
DetectHiddenWindows, Off
}
this.Hotkey("Esc", this.fExit, "On")
this.Hotkey(this.Hotkey_Enter, this.fEnter, "On")
OnMessage(0x201, this.fOnButtonDown) ; WM_LBUTTONDOWN
this.hWin := WinExist("ahk_class TFormMain ahk_exe Bazis_.exe")
ControlGet, HCB, Hwnd, , TSpTBXComboBox3 ; Это для 8ки
this.hEdit := this.CB_GetEditControl(HCB)
ControlGetText, StartStep, , % "ahk_id " this.hEdit
this.StartStep := StartStep
WinGetPos, WinX, WinY, WinWidth, WinHeight, % "ahk_id" this.hActive
Gui, % this.hBlockGui ": Show", x%WinX% y%WinY% w%WinWidth% h%WinHeight%
Gui, % this.hGui ": Show", % "x" WinX + WinWidth // 2 - this.WinWidth // 2 "y" WinY + WinHeight // 2 - this.WinHeight // 2
GuiControl, % this.hGui ": Focus", % this.hShift
ControlSend, ahk_parent, {LCtrl Down}{A}{LCtrl Up}, % "ahk_id" this.hShift
WinGetPos, CtrlX, CtrlY, CtrlW, CtrlH, % "ahk_id" this.hGui
this.MouseMove(CtrlX + CtrlW // 2, CtrlY + CtrlH // 2 + this.BSize // 2, 0)
}
Do(Dir) {
Static doc
BlockInput, On
OnMessage(0x201, this.fOnButtonDown, 0) ; WM_LBUTTONDOWN
this.Hotkey("Esc", this.fExit, "Off")
this.Hotkey(this.Hotkey_Enter, this.fEnter, "Off")
KeyWait, LButton
KeyWait, RButton
GuiControlGet, Shift , % this.hGui ":", % this.hShift
If (Shift + 0 = "")
{
If !doc
doc := ComObjCreate("htmlfile")
, doc.write("<meta http-equiv='X-UA-Compatible' content='IE=9'>")
, doc.write("<script>with (Math) var math_eval = function (str) {return eval(str);};</script>")
try Shift := doc.parentWindow.math_eval(Shift)
If (Shift + 0 = "")
{
this.ToolTip("The expression does not supported", 500)
this.MouseMove(this.X_Start, this.Y_Start, 2)
this.Exit()
Return
}
this.ToolTip("math eval = " Shift, 1500)
}
this.Bazis_SetStep(Shift, this.hEdit)
Dir := this.Dir[Dir]
Gui, % this.hGui ": Show", Hide
Gui, % this.hBlockGui ": Show", Hide
; ControlFocus, TChildControl3D1, % "ahk_id" this.hWin
; this.MouseMem(1, 2)
this.MouseMove(this.X_Start, this.Y_Start, 2)
If this.IsEnter {
Send {Enter}
Sleep 300 ; !!!!шаг меньше 6 не работает
}
Send {%Dir%}
Sleep 200
Send {Enter}
If this.Escape
{
Sleep 155
SendInput {sc1} ; "Escape"
}
this.Bazis_SetStep(this.StartStep, this.hEdit)
BlockInput, Off
this.IsEnter := 0
}
Enter() {
MouseGetPos, , , Window, Control, 2
If Bazis_Shift.Dir[Control]
Return this.IsEnter := 1, this.Do(Control)
}
Exit() {
this.IsEnter := 0
OnMessage(0x201, this.fOnButtonDown, 0) ; WM_LBUTTONDOWN
this.Hotkey("Esc", this.fExit, "Off")
this.Hotkey(this.Hotkey_Enter, this.fEnter, "Off")
Gui, % this.hGui ": Show", Hide
Gui, % this.hBlockGui ": Show", Hide
BlockInput, Off
}
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%
}
OnButtonDown(wParam, lParam, msg, hwnd) {
If (hwnd != this.hBlockGui)
Return
Gui, % this.hGui ": +AlwaysOnTop"
GuiControl, % this.hGui ": Focus", % this.hShift
}
Bazis_SetStep(step, Hwnd) {
ControlSetText, , % step + 0, ahk_id %Hwnd%
ControlFocus, , ahk_id %Hwnd%
ControlSend, , {Enter}, ahk_id %Hwnd%
; EM_SETMODIFY := 0xB9
; SendMessage, EM_SETMODIFY, 1, 0, ahk_id %hEdit%
}
CB_GetEditControl(HCB) {
; HEDIT: Offset = 40 + A_PtrSize, Type = "UPtr"
Return this.CB_GetInfo(HCB, CBBI, 40 + A_PtrSize, "UPtr")
}
CB_GetInfo(HCB, ByRef CBBI, OffSet := -1, Type := "") {
; CB_GETCOMBOBOXINFO = 0x0164
Static SizeOfCBBI := 40 + (A_PtrSize * 3)
VarSetCapacity(CBBI, SizeOfCBBI, 0)
NumPut(SizeOfCBBI, CBBI, 0, "UInt")
SendMessage, 0x0164, 0, &CBBI, , ahk_id %HCB%
Return ((ErrorLevel = 0) || (ErrorLevel = "FAIL")) ? False
: ((OffSet > 0) && (Type <> "")) ? NumGet(CBBI, Offset, Type)
: True
; Return DllCall("User32.dll\GetComboBoxInfo", "Ptr", HCB, "Ptr", &CBBI, "UInt") ? True : False
}
Hotkey(HK, Label, Option = "") {
Hotkey, %HK%, %Label%, %Option%
Return ErrorLevel
}
GuiControl(SubCommand, ControlID = "", Value = "") {
GuiControl, % SubCommand, % ControlID, % Value
}
ToolTip(text = "", time = 500) {
DllCall("GetCursorPos", "int64P", pt)
X := pt << 32 >> 32
Y := pt >> 32
ToolTip, %text%, X-10, Y-45, 20
If time !=
SetTimer, this_HideToolTip, -%time%
Return 1
this_HideToolTip:
ToolTip, , , , 20
Return
}
}
[свернуть]
Последний раз редактировалось sergio1982; 30.12.2021 в 14:21 .
01.01.2022, 01:36
#35
Новичок
Регистрация: 15.01.2009
Сообщений: 19
Сказал(а) спасибо: 38
Поблагодарили 7 раз(а) в 6 сообщениях
Вес репутации:
0
Последовательность запуска опиши, не рабоатет это. За старания спасибо, копаеш не туда.
01.01.2022, 10:46
#36
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
Цитата:
Сообщение от
toucaner
Последовательность запуска опиши, не рабоатет это. За старания спасибо, копаеш не туда.
Можно это всё на русский язык перевести, а то совсем ничего непонятно.
Пользователь сказал cпасибо:
16.01.2022, 13:13
#37
Новичок
Регистрация: 07.01.2020
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Вес репутации:
0
Всем привет! Кто разбирается в скриптах для ahk? Вопрос: как выбрать пункт в форме TTreeView (дерево файлов)?
16.01.2022, 14:23
#38
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
ControlSend может отправлять нажатия когда TTreeView видим.
Скрытый текст
PHP код:
1 ::
SetKeyDelay , 50 , 50
DetectHiddenWindows , On
WinExist ( "ahk_class TDropTreeForm ahk_exe Bazis_.exe" )
ControlSend , TTreeView1 , { Home }
Sleep 100
ControlSend , TTreeView1 , { Down 3 }
ControlSend , TTreeView1 , { Enter }
Return
На 8ке у меня периодически отказывается реагировать на нажатия, в том числе и с клавиатуры, точнее при первом нажатии сразу переходит в выделенную после нажатия папку.
[свернуть]
Это если у вас все папки на местах останутся.
Иначе изучать Accessible, она может получить имена всех папок, а также узнать их вложенность. Тогда выбор можно будет задать указанием пути.
16.01.2022, 16:26
#39
Новичок
Регистрация: 07.01.2020
Сообщений: 9
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Вес репутации:
0
Спасибо, буду пробовать! И ещё вопрос: можно ли и как организовать переход в папку выбранную ранее?
16.01.2022, 16:38
#40
Местный
Регистрация: 01.09.2019
Сообщений: 424
Сказал(а) спасибо: 52
Поблагодарили 481 раз(а) в 147 сообщениях
Вес репутации:
197
Да, перед тем как выбирать нужный пункт, надо запомнить выбранный.
Он имеет соответствующий State, или с помощью accSelection.
Добавлено через 4 минуты
Вы какими инструментами пользуетесь, для предварительной "разведки" Accessible?
Нижняя навигация
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
Текущее время: 00:11 . Часовой пояс GMT +3.