23.11.2006, 10:02 | #1 |
Участник
|
WinApi challenge: Editor hotkeys
Очень хочется приделать к редактору много всякиз вкусных штук, но довольно неудобно их вызывать через EditorScripts.
Сейчас я пользуюсь макросами AutoHotkey для этого, причем имитирую нажатия клавиш, что хреновато работает при переключении раскладки. Хотелось бы работать с контекстными меню по именам пунктов. Например, чтобы скрипт выглядел так: Нажатие клавиши APPS В появившемпся попапе выбрать Scripts В появившемпся попапе выбрать Templates и так далее. Я вижу что в форуме появилось много людей, знающих чем lpsz отличается от void* - может они чем-то помогут? |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
23.11.2006, 12:28 | #2 |
Участник
|
А вариант получить Editor e подходит? Только в этом случае все равно надо немного дописывать EditorScripts ....
|
|
23.11.2006, 12:48 | #3 |
Участник
|
Я не очень понял, как получить Editor e вне EditorScripts. Общая задача сделать так, чтобы при нажатии на Alt+C выделенный кусок кода был закомментирован, например. Сейчас это решено так:
Код: ; Alt+C comment #IfWinActive, ahk_class AxaptaClientClassName ~!c:: SendInput,{APPSKEY}s{vk43sc02E}{ENTER}{vk43sc02E} Exit ; Ctrl+Alt+C uncomment #IfWinActive, ahk_class AxaptaClientClassName ~^!c:: SendInput,{APPSKEY}sc{ENTER}u Exit |
|
23.11.2006, 13:35 | #4 |
Участник
|
Я делал примерно так:
Alt-C отлавливал через ActiveX. В форме ставится таймер, чтобы потом поймать записанный Editor. Далее находим активное MDI окошко, если это Редактора - шлем в него Alt-M (вызов EditorScripts). В EditorScripts дописывался метод, который вызывается первым (вроде showProperties) в нем ставлю проверку - если Alt-M съэмулирован мной - записываю Editor e и выхожу, если не мной - все работает как обычно. После отработки таймера - делаю с Editor e все что хочу. К сожалению не могу пока показать код....переустанавливаюся =) |
|
23.11.2006, 13:42 | #5 |
Участник
|
ALT+M не работает при ошибках компиляции - лучше пользоваться Apps
В принципе, можно сделать скрипт, который всегда будет первым и будет играть роль диспетчера для других. Только как к нему добраться - enter посылать? А как тогда добраться до Scripts |
|
23.11.2006, 14:01 | #6 |
Участник
|
Цитата:
После того как мы получили Editor e нам никакие Scripts уже не нужны. |
|
14.12.2006, 15:14 | #7 |
Moderator
|
Есть такая программа PowerPro, где то 2Мб и не требует установки. Позволяет сделать кучу полезных вещей. В том числе, позволяет на горячие клавиши вешать скрипты.
Скрипт для комментирования выделенного фрагмента кода: Цитата:
local myclip=clip.get
clip.set("") clip copy code=clip.get commentedCode = "" local fHandle = File.Open("c:\\pp_ax_comment.tmp", "w") File.WriteString(fHandle, code) File.Close(fHandle) local fHandle = File.Open("c:\\pp_ax_comment.tmp", "r") For (not File.EOF(fHandle)) codeLine = File.ReadLine(fHandle) commentedCode = commentedCode ++ "// " ++ codeLine EndFor File.Close(fHandle) clip.set(commentedCode) clip paste |
|
15.12.2006, 09:09 | #8 |
Участник
|
Дык намакросить я и сам могу - я хочу вызывать скрипты редактора, которые могут что-то узнать о потрохах аксапты. Например как мне с помощью PowerPro (или не важно чего - я вот, например, Autohotkey пользуюсь) вырать пункт из контекстного меню
|
|
15.12.2006, 15:00 | #9 |
Moderator
|
Надо смотреть конкретное приложение и конкретный случай. Этот пункт меню хоткей имеет? Тогда можно послать в Аксапту коомбинацию клавиш.
Можно еще попробовать поиграться с окнами и сообщениями им. Что-то типа: Цитата:
[power pro code]
local mainwin=window("firstwindow","c=mainclass") local subs=win.childhandlelist(mainwin,"c=subclass") |
|
15.12.2006, 15:35 | #10 |
Участник
|
дык у меня конкретный вопрос: я посылаю {apps} в редактор аксапты - каким образом мне раздобыть handle контекстного меню, которорый потом возникает и выбрать из него пункт - а на чем реализовать - другой вопрос, хоть на pywinauto
|
|
15.12.2006, 15:44 | #11 |
Moderator
|
Цитата:
хоть на pywinauto
|
|
20.02.2007, 12:49 | #12 |
MCTS
|
Цитата:
Сообщение от Alex_KD
Я делал примерно так:
Alt-C отлавливал через ActiveX. В форме ставится таймер, чтобы потом поймать записанный Editor. Далее находим активное MDI окошко, если это Редактора - шлем в него Alt-M (вызов EditorScripts). В EditorScripts дописывался метод, который вызывается первым (вроде showProperties) в нем ставлю проверку - если Alt-M съэмулирован мной - записываю Editor e и выхожу, если не мной - все работает как обычно. После отработки таймера - делаю с Editor e все что хочу. К сожалению не могу пока показать код....переустанавливаюся =) ActiveX для перехвата реализуете вне Аксапты? |
|
22.02.2007, 12:23 | #13 |
Участник
|
|
|
29.03.2007, 16:52 | #14 |
Участник
|
Сделал. Перехватывает контекстное меню, анализирует структуру и посылает ему необходимое количество клавиш перемешений
База знаний ERP : Axapta / Макросы Auto Hotkey |
|