Переключение на Главную Страницу Страницы: [1] 2 3 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) v8.1 + autohotkey = mini OpenConf (число прочтений - 51255 )
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
v8.1 + autohotkey = mini OpenConf
24. Ноября 2008 :: 19:04
Печать  
кто-нибудь уже пробовал скрипты для ahk писать?
описание программы: http://script-coding.info/AutoHotkeyTranslation.html

Скачать: https://github.com/ret-Phoenix/v8CfgAddsAhk

Описание + скрины: http://itpath.ru/v8cfgaddsahk/

v8CfgAddsAhk
============
Набор скриптов для автоматизации ряда действий в конфигураторе.

Реализует часть функционала из Снегопат (https://snegopat.ru/)

Установка
------------
1. Установить Autohotkey (http://www.autohotkey.com/)
2. Зарегистрировать библиотеки:
     - v8CfgAddsAhk\system\svcsvc.dll
     - v8CfgAddsAhk\system\WshExtra.dll
     
Запуск
------------
- v8CfgAddsAhk\v8CfgAdds.ahk (Основной набор скриптов)
- v8CfgAddsAhk\continueRow.ahk (Операции по переносу комментариев, строк). Автор ADirks

Реализованные функции
------------
- Вызов списка процедур: {ctrl +1}
- Поиск с рег.выражениями: {Alt+f}
- Поиск с рег.выражениями (результат последнего поиска): {Alt+r}
- Добавление ссылки на основной реквизит в модуле (преобразование модуля формы из обычных форм в управляемые): {Alt+h}
- Генератор кода для объектов метаданных (требуется предварительная генерация файла структуры обработкой v8CfgAddsAhk\ext\ПолучениеСтруктуры.epf): {Alt+g}
- Препроцессор функции: {Alt+7}
- Закоментировать строку: {ctrl + / (ctrl + .)}
- Развернуть модуль: {ctrl+i}
- Удаление строки: {Ctrl+y}
- Авторские комментарии:
     - блок добавлен: {alt+s}
     - блок изменен: {alt+e}
     - блок удален: {alt+d}
- Cимвол '<': {Ctrl-,}
- Cимвол '>': {Ctrl-.}
- Cимвол '|': {Ctrl-\}
- Копирование текущей строки и вставка в следующей: {ctrl+shift+c}
- Переход в процедуру: {ctrl+enter}
- Возврат на предыдущую позицию: {Alt,-}
- Форматирование модуля: {F6} (code_beautifier.pl - ADirks)
« Последняя редакция: 02. Сентября 2014 :: 13:32 - Phoenix »  

v8ahk.rar ( 53 KB | Загрузки )

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
Brr
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 142
Зарегистрирован: 26. Декабря 2006
Re: v8.1 + autohotkey = mini OpenConf
Ответ #1 - 25. Ноября 2008 :: 08:43
Печать  
Можно посмотреть как прикрутил?
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #2 - 25. Ноября 2008 :: 11:24
Печать  
небольшая настройка:
- поиск с рег.выражениями с установками закладок
- комментирование текущей строки
- открытие списка процедур
- форматирование модуля (требуется разобраться почему вставляет кракозябру)

потребуется подправить пути скриптов.
  

ahk.zip ( 1 KB | Загрузки )

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #3 - 25. Ноября 2008 :: 11:38
Печать  
сцуко наболело  Улыбка)

Код
Выбрать все
; удаление строки Ctrl+y
$^y::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send ^l
Else
	Send ^y
Return


;Закрытие окна сообщение Ctrl+z (не всем нравится)
$^z::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send ^+z
Else
	Send ^z
Return


;символ '<' по Ctrl-,
$^,::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send <
Else
	Send ^,
Return


;символ '>' по Ctrl-.
$^.::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send >
Else
	Send ^.
Return
 

  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #4 - 25. Ноября 2008 :: 11:41
Печать  
Леша, вот ты и попался Улыбка
может подскажешь, что нужно сделать, чтобы твой содебьютифаер заработал нормально? Улыбка
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #5 - 25. Ноября 2008 :: 12:20
Печать  
Вот и началась Улыбка бедная-бедная автоматизация 8-ки Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #6 - 25. Ноября 2008 :: 12:29
Печать  
так, поправочка
Код
Выбрать все
; удаление строки Ctrl+y
$^SC015::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send ^{SC026}
Else
	Send ^{SC015}
Return


;Закрытие окна сообщение Ctrl+z (не всем нравится)
$^SC02C::
WinGetClass, class, A
If class = V8TopLevelFrame
	Send ^+{SC02C}
Else
	Send ^{SC02C}
Return
 


вечная проблема с раскладкой в SendKey
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #7 - 26. Ноября 2008 :: 04:37
Печать  
после некоторых ковыряний и подсказки Артура получилось такое
Код
Выбрать все
Ctrl_A = ^{SC01E}
Ctrl_L = ^{SC026}
Ctrl_Shift_Z = ^+{SC02C}

#IfWinActive ahk_class V8TopLevelFrame
F6::

module = %temp%\module.1s
clipboard =

Send %Ctrl_A%

Send, ^{ins}
FileDelete %module%
FileAppend, %clipboard%, %module%
RunWait, perl S:\gcomp\scripts\code_beautifier\code_beautifier.pl -f %module%

FileRead, text, %module%

clipboard =
ClipPutText(text)
ClipWait
Send +{ins}

Return



; Вызов списка процедур: ctrl +1
#IfWinActive ahk_class V8TopLevelFrame
^1::
;SendMessage, 0x50,, 0x4090409,, A ;
;Send, ^!p
;SendMessage, 0x50,, 0x4190419,, A ;

SendMessage, 0x50,, 0x4090409,, A ;
Send %Ctrl_A%
Send, ^{ins}
FileDelete %temp%\module.1s
FileAppend, %clipboard%, %temp%\module.1s
;Send, {home}
Run, wscript .\scripts.js %temp%\module.1s proclist
Return


; удаление строки Ctrl+y
#IfWinActive ahk_class V8TopLevelFrame
$^SC015::Send %Ctrl_L%


;Закрытие окна сообщение Ctrl+z (не всем нравится)
#IfWinActive ahk_class V8TopLevelFrame
$^SC02C::Send %Ctrl_Shift_Z%


;символ '<' по Ctrl-,
#IfWinActive ahk_class V8TopLevelFrame
$^,::Send <


;символ '>' по Ctrl-.
#IfWinActive ahk_class V8TopLevelFrame
$^.::Send >

;символ '|' по Ctrl-\
#IfWinActive ahk_class V8TopLevelFrame
$^\::Send |




set_locale_ru()
{
	SendMessage, 0x50,, 0x4190419,, A
}



;From http://forum.script-coding.info  (http://forum.script-coding.info/viewtopic.php?id=1073)
ClipPutText(Text, LocaleID=0x419)
{
  CF_TEXT:=1, CF_LOCALE:=16, GMEM_MOVEABLE:=2
  TextLen   :=StrLen(Text)
  HmemText  :=DllCall("GlobalAlloc", UInt, GMEM_MOVEABLE, UInt, TextLen+1)  ; Запрос перемещаемой
  HmemLocale:=DllCall("GlobalAlloc", UInt, GMEM_MOVEABLE, UInt, 4)  ; памяти, возвращаются хэндлы.
  If(!HmemText || !HmemLocale)
    Return
  PtrText   :=DllCall("GlobalLock",  UInt, HmemText)   ; Фиксация памяти, хэндлы конвертируются
  PtrLocale :=DllCall("GlobalLock",  UInt, HmemLocale) ; в указатели (адреса).
  DllCall("msvcrt\memcpy", UInt, PtrText, Str, Text, UInt, TextLen+1) ; Копирование текста.
  NumPut(LocaleID, PtrLocale+0)		     ; Запись идентификатора локали.
  DllCall("GlobalUnlock",     UInt, HmemText)   ; Расфиксация памяти.
  DllCall("GlobalUnlock",     UInt, HmemLocale)
  If not DllCall("OpenClipboard", UInt, 0)	; Открытие буфера обмена.
  {
    DllCall("GlobalFree", UInt, HmemText)    ; Освобождение памяти,
    DllCall("GlobalFree", UInt, HmemLocale)  ; если открыть не удалось.
    Return
  }
  DllCall("EmptyClipboard")			   ; Очистка.
  DllCall("SetClipboardData", UInt, CF_TEXT,   UInt, HmemText)   ; Помещение данных.
  DllCall("SetClipboardData", UInt, CF_LOCALE, UInt, HmemLocale)
  DllCall("CloseClipboard")						  ; Закрытие.
}




ClipGetText(CodePage=1251)
{
  CF_TEXT:=1, CF_UNICODETEXT:=13, Format:=0
  If not DllCall("OpenClipboard", UInt, 0)		     ; Открытие буфера обмена.
    Return
  Loop
  {
    Format:=DllCall("EnumClipboardFormats", UInt, Format)  ; Перебор форматов.
    If(Format=0 || Format=CF_TEXT || Format=CF_UNICODETEXT)
	Break
  }
  If(Format=0)	  ; Текста не найдено.
    Return
  If(Format=CF_TEXT)
  {
    HmemText:=DllCall("GetClipboardData", UInt, CF_TEXT)  ; Получение хэндла данных.
    PtrText :=DllCall("GlobalLock",	 UInt, HmemText) ; Конвертация хэндла в указатель.
    TextLen :=DllCall("msvcrt\strlen",    UInt, PtrText)  ; Измерение длины найденного текста.
    VarSetCapacity(Text, TextLen+1)  ; Переменная под этот текст.
    DllCall("msvcrt\memcpy", Str, Text, UInt, PtrText, UInt, TextLen+1) ; Текст в переменную.
    DllCall("GlobalUnlock", UInt, HmemText)  ; Расфиксация памяти.
  }
  Else If(Format=CF_UNICODETEXT)
  {
    HmemTextW:=DllCall("GetClipboardData", UInt, CF_UNICODETEXT)
    PtrTextW :=DllCall("GlobalLock",	 UInt, HmemTextW)
    TextLen  :=DllCall("msvcrt\wcslen",    UInt, PtrTextW)
    VarSetCapacity(Text, TextLen+1)
    DllCall("WideCharToMultiByte", UInt, CodePage, UInt, 0, UInt, PtrTextW
					   , Int, TextLen+1, Str, Text, Int, TextLen+1
					   , UInt, 0, Int, 0)  ; Конвертация из Unicode в ANSI.
    DllCall("GlobalUnlock", UInt, HmemTextW)
  }
  DllCall("CloseClipboard")  ; Закрытие.
  Return Text
} 


Фишка была в том, что в клипборд текст засовывало приложение AHK, а у него включена аглицкая раскладка клавиатуры. Т.е. нужно либо принудительно включать AHK русскую раскладку, либо самостоятельно складывать текст в клипборд. Благо для второго варианта всё готовое есть на ScriptCoding.
Но конструкции типа DllCall("GlobalAlloc", UInt, GMEM_MOVEABLE, UInt, TextLen+1) в скриптах меня всегда сражали просто наповал  Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #8 - 26. Ноября 2008 :: 05:40
Печать  
Чуть проще написать
#IfWinActive ahk_class V8TopLevelFrame
один раз в начале скрипта, а не повторять каждый раз Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
The gray Cardinal
Full Member
***
Отсутствует



Сообщений: 159
Зарегистрирован: 17. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #9 - 26. Ноября 2008 :: 10:16
Печать  
Чтобы не дрочить раскладку, нужно посылать клавиши не буквально, а по скан-кодам. Например, вместо:
Код
Выбрать все
; Вызов списка процедур: ctrl +1
^1::
SendMessage, 0x50,, 0x4090409,, A ;
Send, ^!p
SendMessage, 0x50,, 0x4190419,, A ;
Return 


Лучше писать:
Код
Выбрать все
; вызов окна списка процедур: Сtrl+1
^1::
Send, ^!{sc019} ; Ctrl+Alt+P
Return
 

  
Наверх
www  
IP записан
 
The gray Cardinal
Full Member
***
Отсутствует



Сообщений: 159
Зарегистрирован: 17. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #10 - 26. Ноября 2008 :: 11:43
Печать  
А чем code_beautifier.pl лучше стандартного Alt+Shift+F?
  
Наверх
www  
IP записан
 
The gray Cardinal
Full Member
***
Отсутствует



Сообщений: 159
Зарегистрирован: 17. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #11 - 26. Ноября 2008 :: 11:59
Печать  
  
Наверх
www  
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #12 - 26. Ноября 2008 :: 12:22
Печать  
The gray Cardinal писал(а) 26. Ноября 2008 :: 11:43:
А чем code_beautifier.pl лучше стандартного Alt+Shift+F?


убирает лишние пустые строки.
форматирует с отступом строки, если был перенос.
делает первую букву служебных слов заглавной
...

раздел на твоем ресурсе - отлично! т.к. этот ресурс несколько не по теме.
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
The gray Cardinal
Full Member
***
Отсутствует



Сообщений: 159
Зарегистрирован: 17. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #13 - 26. Ноября 2008 :: 13:06
Печать  
ADirks
Можно code_beautifier.pl я у себя опубликую?

All
И вообще, не возражаете, если я буду публиковать здешние скрипты у себя?
  
Наверх
www  
IP записан
 
The gray Cardinal
Full Member
***
Отсутствует



Сообщений: 159
Зарегистрирован: 17. Июня 2006
Пол: Мужской
Re: v8.1 + autohotkey = mini OpenConf
Ответ #14 - 26. Ноября 2008 :: 13:12
Печать  
Phoenix писал(а) 26. Ноября 2008 :: 12:22:
убирает лишние пустые строки.
форматирует с отступом строки, если был перенос.
делает первую букву служебных слов заглавной
...

Было бы неплохо развернуть многоточие в конце Улыбка. Очень кратко, но развернуть. Чтобы было понятно.
Просто, чтобы ставить ActivePerl и всё такое, нужны причины Улыбка.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 9
ОтправитьПечать