1 (изменено: Доктор ТуамОсес, 2015-07-01 18:47:46)

Тема: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Какие вообще существуют инструменты разработчика скриптов AHK?
Т.е. инструменты, которые облегчают написание, отладку и выполнение AHK скриптов.

Например, макрорекордеры и IDE с дебаггером и оптимизатором.
А для выполнения - компиляторы AHK-скриптов в EXE-формат.

К примеру, кто-нибудь работал с Pulover's Macro Creator?

Как я понял, это как раз и есть макрорекордер + IDE с дебаггером в одном флаконе.
Пытаюсь его "пощупать".

Гемор начался с того, что на офф. сайте разработчика почему то скачать сию прогу невозможно.

Поискал в других местах.

Наконец скачал откуда-то в дебрях инета портабельную версию, распаковал и в папке MacroCreator обнаружил следующее:
http://fotorar.ru/di/VJC6/.png

При попытке запустить MacroCreator.exe (его MD5 равна 98C353CBBF1A5B5E509B60458E3750CD) появилось сначала это:

http://fotorar.ru/di/ECVP/.png

Потом это:

http://fotorar.ru/di/H4CU/.png

И наконец это:

http://fotorar.ru/di/U69Q/.png

И все.

Чё ей надо не пойму.

У кого-нибудь получилось заставить прогу работать?

Помогите!

2

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Не знаю что за скрипт, но судя по ошибкам, нужно установить в ОС язык ввода по умолчанию на английский.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3 (изменено: Доктор ТуамОсес, 2015-07-01 15:33:20)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

serzh82saratov спасибо за наводку.
Удалось таки запустить программу. Путем удаления русского языка из панели языков.

4

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес, у нас в конце предложений принято ставить точки. Отредактируйте свои посты.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5 (изменено: Доктор ТуамОсес, 2015-07-01 15:37:17)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

После того как открыл таки главное окно программы увидел, что она достаточно навароченная (куча менюшек, кнопочек, настроек).
Так что сразу и не врубишься что к чему и для чего. В инете информация есть, но она вся на английском. В рунете по поводу этой программы практически ничего нет, кроме самой общей информации.
Хотелось бы восполнить этот пробел.
Кто-нибудь работал в этой программе?
В каких случаях она бывает полезна и реально "упрощает жизнь"?
Какие есть нюансы/особенности в использовании этой программе?

И чем она лучше старого доброго AutoScriptWriter.exe?

6 (изменено: Доктор ТуамОсес, 2015-07-01 18:32:32)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Вот скрин программы
http://www.macrocreator.com/wp-content/uploads/2013/09/pmc_01.png
Что это за бокового окно с кодом в виде дерева?
У меня его нет.

7

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес, исправьтесь. И в остальных ветках тоже. У вас времени до вечера.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

Доктор ТуамОсес, исправьтесь. И в остальных ветках тоже. У вас времени до вечера.

Чем вызвано столь большая требовательность к соблюдению правил пунктуации?

А! Понял. У Вас парсер контента форума глючит или вообще "падает" если в конце предложения не стоит точка?

Я угадал?
Ну так тщительней надо. Парсеры писать.

9

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

А что касаете pulover macro recorder.

То как я понял, это не просто макрорекордер.

Это ещё и целая IDE для отладки макросов.
И этим он и отличается от AutoScriptWriter.exe.
Так?

10

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес пишет:

Чем вызвано столь большая требовательность к соблюдению правил пунктуации?

Правилами и традициями, ничего личного.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: Доктор ТуамОсес, 2015-07-01 18:45:35)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker

А в чем и как (в смысле используете ли макрорекордеры или весь код ручками набиваете?) Вы пишите AHK скрипты?

Есть у Вас какая-то специализированная среда для написания, оптимизации и отладки кода AHK-скриптов?

12

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Никогда не использовал макрорекордеров, мне с самого начал было интересно писать код самостоятельно. Среда разработки и отладки — SciTE4AutoHotkey.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

Никогда не использовал макрорекордеров, мне с самого начал было интересно писать код самостоятельно.

Но, как бы, это немного утомительно и долго, когда чуть ли не 95% кода AHK-скрипта это команды Click и Sleep вручную писать все эти сотни Click и Sleep.

Не находите?

14

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

У меня, честно говоря, не было опыта писать код, 95% которого — это Click и Sleep. По всей видимости, это может быть что-то типа бота для игр, а я ими не увлекаюсь. Тем не менее, писать вручную такой код надёжнее (хоть возможно и дольше), можно больше условий учесть.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

У меня, честно говоря, не было опыта писать код, 95% которого — это Click и Sleep. По всей видимости, это может быть что-то типа бота для игр, а я ими не увлекаюсь.

Нет. Не игры. Я ими тоже не увлекаюсь.
САПР (системы автоматизированного проектирования)


teadrinker пишет:

Тем не менее, писать вручную такой код надёжнее (хоть возможно и дольше), можно больше условий учесть.

Дольше. И иногда это очень плохо.
Почему?
Поясню.
Потому что зачастую скрипты в САПР как бы это сказать ... "Одноразовые" что ли.
Ну т.е. ты его использовал раз 10 и все. Больше он тебе не пригодится.

Поэтому в САПР очень важна скорость написания скриптов.
Чтобы скрипты писались буквально "на лету".

А то если я буду "ручками" набивать код тщательно выверяя все координаты кликов и все условия, то мне быстрей будет и проще "ручками" сделать нужно мне действие в САПР, чем писать скрипт.

Надеюсь понятно объяснил.

16

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Применяя вашу же логику, зачем вам разбираться со сложным навороченным редактором макросов с IDE? Проще "накликать" в AutoScriptWriter шаблон.

17

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Да, тоже подумал, что в профессиональных средах разработки должна быть возможность записи макросов.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Универсальные решения, чаще всего неудобны в конкретных случаях. Проще под себя написать такой рекордер, тем более когда требуемые задачи однообразны.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19 (изменено: Доктор ТуамОсес, 2015-07-01 20:13:02)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

Да, тоже подумал, что в профессиональных средах разработки должна быть возможность записи макросов.

Вот вот.
Всё как в реальной жизни: иногда проще и ГОРАЗДО быстрей человеку просто показать на примере, как и что нужно делать, чем долго и муторно объяснять это словами.  А некоторые вещи словами  вообще невозможно объяснить. Можно только показать.
К примеру, как на словах объяснить чем письменная буква "а" отличается от письменной буквы "б"? Это невозможно.

Поэтому, как мне кажется по аналогии, инструменты разработки скриптов должны включать в себя возможность вместо набивания вручную всего кода скрипта и ввода всех необходимых числовых данных просто "обучать" скрипт "показывая" ему, что и как нужно делать. При необходимости это как-то комментируя.

Насчет "комментируя".
БЕДА в том, что все известные мне макрорекордеры достаточно тупые (может просто я не все знаю, поэтому прошу поправить). В них нельзя, показывая машине что нужно делать, тут же, на лету, и комментировать, чтобы это сразу отражалось в коде генерируемого скритпа.

Например "Вот эта точка - точка скругления, а вот эта - точка вращения".

А то после того, как макрорекордер закончит запись, потом голову сломаешь разбирать, где у тебя точка скругления, где точка вращения и т.п.

20

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Так я не пойму, вас почему-либо не устраивает качество записи макросов в вашей среде разработки? Это AutoCAD, наверно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

21 (изменено: Доктор ТуамОсес, 2015-07-02 00:00:38)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Хоть это оффтоп в этой теме, но я отвечу, раз Вы меня спрашиваете.
Я ищу более лучшие и универсальные (и одновременно гибкие) решения для автоматизации работы во всех мной используемых САПР.
И не только для САПР. Но для работы со всеми другими используемыми мной программами как общего так и узкоспециализированного назначения. И для создания СВЯЗОК между программами, когда изначально ничего не знающие друг о друге программы начинают работать в единой связке.

Пока я остановился на AutoHotKey_L.

Но как это обычно бывает у всех людей, со временем начинаешь видеть недостатки у используемого инструмента и начинает хотеться чего-то большего. Так уж устроена природа человека.

Хочется писать скрипты ещё быстрей и чтобы они при этом были более "умные". И чтоб писать было легко, удобно и комфортно. И начинаешь "крутиться по сторонам" и искать.
Вдруг в мире уже  придумали что-то новое в разработке скриптов, а я про это ничего не знаю.

Просто очень часто возникает необходимость оформить какие-либо часто повторяющиеся одинаковые (или похожие) рутинные действия в виде скрипта (я от природы ленив и если какие-то действия можно поручить делать машине - я стараюсь это сделать), чтобы потом делать их "одним кликом"©

Поэтому и пришёл на этот форум автоматизации работы на компьютере с помощью скриптов.

В надежде, что тут много людей, которые тоже интересуются автоматизацией работы на компе и которые много чего знают по тематике разработки скриптов.

Поэтому поделятся своим опытом и/или знаниями.

22

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Понимаю вас, но не думаю, что вы преуспеете в своих поисках. Дело в том, что люди, "которые тоже интересуются автоматизацией работы на компе и которые много чего знают по тематике разработки скриптов" практически никогда не интересуются инструментами типа AutoScriptWriter.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

23

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Если разбить мои "хотелки" на части, то скажу пока только про пункт, который условно назовем пункт а. Про остальные пункты потом поговорим. А то слишком большой пост получится.

а) Хочу более удобный, "умный" и адаптируемый ("обучаемый") к проблемной области макрорекордер.

Что это значит?

Ну, к примеру, чтобы макрорекордер можно было как-то "научить" писать мне скрипты не в виде миллиарда Click, Sleep, MoveMouse, а более близким к проблемной области языком с расшифровкой смысла каждого "Click"-а.
Типо так:
-> Кликнуть по точке привязки
-> Выбрать точку изгиба
-> Кликнуть по пункту меню "выделить"
-> Сдвинуть курсор за пределы рабочего поля

Ещё пример. Хочу, чтобы макрорекордер можно было как-то "научить", чтобы он сам автоматом понимал, какие клики и другие события в системе писать, какие нет, а вместо каких нужно в скрипте создать код-заглушку, который при выполнении скрипта будет просить юзверя указать нужную точку на экране или ввести нужные данные.

Вы скажите: "Программа макрорекордера тебе что? Телепат? Откуда она знает по точке привязки окружности в рабочем поле ты кликнул или же по пункту контекстного меню? И откуда она может знать, что вместо (или после) клика по этой точке ты хочешь вставить некий код заглушку и какой именно код. И откуда она может знать, что точка, по которой ты кликаешь, несет для тебя какой-то особый смысл?"

Так в этом-то вся и соль. И я не говорил, что это просто. Но ведь прогресс не стоит на месте. Вдруг что-то такое уже появилось, а я про это ничего не знаю

Во-первых, я не профессиональный программист. Поэтому отвечу "НЕ ЗНАЮ КАК". Пусть программисты-разработчики скриптописалок думают.
А во-вторых, мне кажется что юзверь перед кликом мог бы подать макрорекордеру условный знак (например нажав какое-нибудь заранее условленное сочетание клавиш или кликнув в заданное место служебного поля макрорекордера).


И кстати, к слову.

Вопрос.

Скажите пожалуйста люди!

AHK последних версий ещё не научился различать куда кликнул юзверь: по пункту меню (и по какому конкретно) или же по какому-то (какому конкретно) объекту в рабочем поле программы?

Т.е. новые версии AHK ещё не научились забираться в "кишки" отслеживаемой программы? И могут считывать только title и координаты?

А то мне надо в скрипте определять факт открытия контекстного меню и названия пункта, по которому в этом меню кликнул юзверь.

Это можно сделать в AHK?

24

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

Понимаю вас, но не думаю, что вы преуспеете в своих поисках. Дело в том, что люди, "которые тоже интересуются автоматизацией работы на компе и которые много чего знают по тематике разработки скриптов" практически никогда не интересуются инструментами типа AutoScriptWriter.

Я не хотел бы с Вам спорить и втягиваться в оффтоп, просто скажу, что у меня другое мнение по этому вопросу.
И я обосную почему.
Вводить вручную координаты нескольких десятков точек для "одноразового" скрипта, вместо того чтобы просто быстро "прокликать" их на экране?
Не думаю, что кому-то это доставит удовольствие.

25

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Ну так тут нечего и спорить, если я не прав, меня здесь быстро опровергнут!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26 (изменено: Доктор ТуамОсес, 2015-07-02 00:09:19)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker пишет:

люди, "которые тоже интересуются автоматизацией работы на компе и которые много чего знают по тематике разработки скриптов" практически никогда не интересуются инструментами типа AutoScriptWriter.

Но зато, они наверняка интересуются средами для разработки, оптимизации, верификации и отладки кода скриптов. И инструментами создания переносимых между компами и платформами скриптов.
Пусть про это расскажут. Ибо это всё в рамках темы.

27

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Irbis пишет:

Применяя вашу же логику, зачем вам разбираться со сложным навороченным редактором макросов с IDE? Проще "накликать" в AutoScriptWriter шаблон.

Ну...
Во-первых (касается "проще накликать"), даже когда "кликов" всего с десяток и то с кодом, состоящим только из "Click,Click,Click,Click,Click,..." уже достаточно трудно разобраться. Потому что приходится ломать голову какой клик за что отвечает. А что уж говорить когда кликов становится под сотню - то вообще труба. Поэтому с таким шаблоном трудно работать.
Во-вторых, (касается "навороченного редактора макросов с IDE"), я не только одноразовые простые"автокликалки" пишу. Иногда, когда нужно заставить работать "в одной упряжке" (т.е. взаимодействуя друг с другом) сразу несколько приложений или когда нужно расширить функционал некоторого приложения с помощью AHK, то приходится писать скрипты с довольно сложной логикой с нуля "ручками"(без использования автоматической макрописалки).

А отсутствие инструментов, упрощающих и ускоряющих разработку сложных скриптов, ограничивает мои возможности в создании сложных и "интеллектуальных" скриптов.

Я хочу преодолеть эти ограничения.
Поэтому я и озадачился поиском таких инструментов.

28

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

AHK последних версий ещё не научился различать куда кликнул юзверь: по пункту меню (и по какому конкретно) или же по какому-то (какому конкретно) объекту в рабочем поле программы?

Т.е. новые версии AHK ещё не научились забираться в "кишки" отслеживаемой программы? И могут считывать только title и координаты?

Да он и старенький, с нужными библиотеками всё мог.
У вас много: хочу чтобы так было и баста, и как следствие "холодно".
Любой универсальный рекордер, инструмент примитивный. Технологии AutoHotkey давно позволяют осуществить желаемое, но под каждую хотелку готового скрипта нет. Задачи на самом деле, слишком специфичны. Для работы с конкретными программами, да ещё и их понятным комментированием, уже наверняка нужны и спец. сценарии.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

29 (изменено: Доктор ТуамОсес, 2015-07-02 02:57:30)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

serzh82saratov пишет:

Да он и старенький, с нужными библиотеками всё мог.

Поясните. Как можно узнать, что указатель мыши в момент клика был на некотором пункте меню и на каком конкретно.
Не создавать же для этого вопроса отдельную тему.
А ответ очень важен мне.
И вдовесок близкий к этому вопрос: как можно с помощью AHK позиционировать указатель мыши на пункт меню с заданным текстом без использования OCR-библиотек, а просто залезя в "кишки" Windows?

30

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес пишет:

Во-первых, я не профессиональный программист. Поэтому отвечу "НЕ ЗНАЮ КАК". Пусть программисты-разработчики скриптописалок думают.

А здесь нет профессиональных программистов. Так что придётся вам самому под себя рекордер делать.

31

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Как можно узнать, что указатель мыши в момент клика был на некотором пункте меню и на каком конкретно.

Тут нужно смотреть саму программу, меню и нестандартными бывают, впрочем как и элементы управления.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

32 (изменено: Доктор ТуамОсес, 2015-07-03 23:10:45)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Да мне, честно говоря, "не до жиру".
Вы хотя бы научите меня, как со "стандартными" работать раз уж Вы говорите, что "... он и старенький, с нужными библиотеками всё мог", чтобы Ваши слова не выглядели голословными (как "пук в лужу").
Вот как мне узнать, через сколько миллисекунд после клайка правой кнопкой мыши открылось контекстное меню и как прочитать название пункта меню, на который в данный момент я навёл указатель мыши?

33

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

чтобы Ваши слова не выглядели как "пук в лужу".

Ну лично я, за то, чтобы оно вам так и казалось, чем кому-то что-то доказывать.

Вы хотя бы научите меня

Дак вам сначала вопросы надо научится задавать, всяким там разным людишкам, а не выёживатся.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

34

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Понял. Значит не знаете как в AHK узнать (без использования функций OCR (т.е. без распознавания текста на картинке), а чисто залазия в "кишки" Windows), что мышь "висит" над контекстным меню и над каким конкретно пунктом. Я так и думал.

А насчет "пука в лужу" извините. Погорячился. Просто не люблю когда люди говорят бездоказательно весьма сомнительные вещи.

35

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

OFF: Доктор, вы, случаем, не проктолог по специализации?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

36

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Значит не знаете как

Как в стандартном меню знаю, и знают ещё много людей. Но почему-то вам, уважаемый, не спешат помочь.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

37

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

serzh82saratov пишет:

Значит не знаете как

Как в стандартном меню знаю, и знают ещё много людей.

Никто не знает. Потому что этого невозможно. Если б знали - давно бы написали. Ибо я когда знаю и могу помочь - всегда пишу. Так и люди ВСЕ поступают.

А почему Вы все ремя делаете упор на слове "стандартном"?
Что это значит? Разве в венде есть ещё и не стандартные меню?
Ведь любые программы для создания всех меню в венде используют одну и ту же вендовую DLL. Разве нет?

38

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Не в "венде", а в программах. Как автор программы реализует функционал меню — его личное дело. Может использовать и то, что ОС предоставляет, но не обязан.

39 (изменено: serzh82saratov, 2015-07-04 14:49:25)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Никто не знает. Потому что этого невозможно. Если б знали - давно бы написали. Ибо я когда знаю и могу помочь - всегда пишу. Так и люди ВСЕ поступают.

Ну по себе всех судить не надо, возможно стиль вашего общения, не способствует желанию оказания помощи. Ну а на счёт никто не знает, и невозможно, действительно необоснованное заявление. Например такой скрипт обводит пункт и выводит его имя, делает он это через acessible интерфейс, но можно ещё и по другому.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

40 (изменено: Доктор ТуамОсес, 2015-07-04 15:30:46)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

YMP пишет:

Не в "венде", а в программах. Как автор программы реализует функционал меню — его личное дело. Может использовать и то, что ОС предоставляет, но не обязан.

Я не име в виду всякие извраты.
Я имел в виду программы, создающие меню штатными средствами Windows (через встроенные в Windows API, DLL).
Как в AHK можно узнать в какой момент контекстное меню открылось/закрылось, какие пункты содержатся в данном меню и над какими пунктом меню (т.е. прочитать название данного пункта) находится в данный момент указатель мыши

41

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

serzh82saratov пишет:

Ну по себе всех судить не надо

Я не сужу.
Я, напротив, о людях всегда хорошо думаю (типа "раз я всегда готов помочь - то и остальные люди тоже добрые как и я").
Пока человек не докажет мне обратное.
Вот Вы ещё немного и докажете мне.

42

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

serzh82saratov пишет:

Ну а на счёт никто не знает, и невозможно, действительно необоснованное заявление. Например такой скрипт обводит пункт и выводит его имя, делает он это через acessible интерфейс, но можно ещё и по другому.

Спасибо. Почитаю.
Ну беглый взгляд показал, что это не совсем то, о чем я спрашивал.
Что скрипт по ссылке решает другие задачи

43

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес пишет:

Я имел в виду программы, создающие меню штатными средствами Windows (через встроенные в Windows API, DLL).
Как в AHK можно узнать в какой момент контекстное меню открылось/закрылось, какие пункты содержатся в данном меню и над какими пунктом меню (т.е. прочитать название данного пункта) находится в данный момент указатель мыши

MouseGetPos
Считывает текущее положение курсора мыши, а также определяет, какое окно и какой контрол находятся под курсором.
MouseGetPos, [OutputVarX, OutputVarY, OutputVarWin, OutputVarControl, 1|2|3]



ControlGet
Считывает разнообразную информацию о контролах (элементах управления) окна.
ControlGet, OutputVar, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

44 (изменено: yalanne, 2015-07-04 21:56:59)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес пишет:

Поясните. Как можно узнать, что указатель мыши в момент клика был на некотором пункте меню и на каком конкретно.

Вот:

+ код
; If с решеткой влияет на действие клавиш при определенных ситуациях.
; Скрипт работает через Acc Library
; С помощью Acc_ObjectFromPoint производится проверка элемента, который находится под курсором. А точнее проверяется роль в системе.  Список ролей и их описание опишу ниже.
; первый раз в 'c' заносится(создается переменная) дочерний id элемента. А во второй раз читает этот id.
; 33  (0x00000021 hex) это роль ROLE_SYSTEM_LIST.
; для windows рабочий стол это listbox, просто модифицированный. 
#if Acc_ObjectFromPoint(c).AccRole(c) = 33
; И так если курсор находится на пустом месте рабочего стола или на пустом месте listbox'а какой нибуть проги, то
    ~RButton:: ; при нажатии правой кнопки мыши
    Hwnd_menu := "" ;(сброс с прошлого потока)
    WinWait ahk_class #32768, , 01 ; ждем открытие окна меню.
    if ErrorLevel 
        return 
    WinGet Hwnd_menu, ID,ahk_class #32768 ; если окно найдено получаем его hwnd
return

#if Hwnd_menu = Getpos()  ; При нажатии левой кнопки мыши сравниваем hwnd окна меню и то что под мышкой
; если истина то показываем тултип.
    LButton::tooltip % "Нажата кнопка '" Acc_ObjectFromPoint(c).AccName(c) "'" 
return
#if

Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}


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")
}

Getpos(){
MouseGetPos, , , id
return id
}    
    
+ роли
ROLE_SYSTEM_TITLEBAR            = 0x00000001
ROLE_SYSTEM_MENUBAR             = 0x00000002
ROLE_SYSTEM_SCROLLBAR           = 0x00000003
ROLE_SYSTEM_GRIP                = 0x00000004
ROLE_SYSTEM_SOUND               = 0x00000005
ROLE_SYSTEM_CURSOR              = 0x00000006
ROLE_SYSTEM_CARET               = 0x00000007
ROLE_SYSTEM_ALERT               = 0x00000008
ROLE_SYSTEM_WINDOW              = 0x00000009
ROLE_SYSTEM_CLIENT              = 0x0000000A
ROLE_SYSTEM_MENUPOPUP           = 0x0000000B
ROLE_SYSTEM_MENUITEM            = 0x0000000C
ROLE_SYSTEM_TOOLTIP             = 0x0000000D
ROLE_SYSTEM_APPLICATION         = 0x0000000E
ROLE_SYSTEM_DOCUMENT            = 0x0000000F
ROLE_SYSTEM_PANE                = 0x00000010
ROLE_SYSTEM_CHART               = 0x00000011
ROLE_SYSTEM_DIALOG              = 0x00000012
ROLE_SYSTEM_BORDER              = 0x00000013
ROLE_SYSTEM_GROUPING            = 0x00000014
ROLE_SYSTEM_SEPARATOR           = 0x00000015
ROLE_SYSTEM_TOOLBAR             = 0x00000016
ROLE_SYSTEM_STATUSBAR           = 0x00000017
ROLE_SYSTEM_TABLE               = 0x00000018
ROLE_SYSTEM_COLUMNHEADER        = 0x00000019
ROLE_SYSTEM_ROWHEADER           = 0x0000001A
ROLE_SYSTEM_COLUMN              = 0x0000001B
ROLE_SYSTEM_ROW                 = 0x0000001C
ROLE_SYSTEM_CELL                = 0x0000001D
ROLE_SYSTEM_LINK                = 0x0000001E
ROLE_SYSTEM_HELPBALLOON         = 0x0000001F
ROLE_SYSTEM_CHARACTER           = 0x00000020
ROLE_SYSTEM_LIST                = 0x00000021
ROLE_SYSTEM_LISTITEM            = 0x00000022
ROLE_SYSTEM_OUTLINE             = 0x00000023
ROLE_SYSTEM_OUTLINEITEM         = 0x00000024
ROLE_SYSTEM_PAGETAB             = 0x00000025
ROLE_SYSTEM_PROPERTYPAGE        = 0x00000026
ROLE_SYSTEM_INDICATOR           = 0x00000027
ROLE_SYSTEM_GRAPHIC             = 0x00000028
ROLE_SYSTEM_STATICTEXT          = 0x00000029
ROLE_SYSTEM_TEXT                = 0x0000002A
ROLE_SYSTEM_PUSHBUTTON          = 0x0000002B
ROLE_SYSTEM_CHECKBUTTON         = 0x0000002C
ROLE_SYSTEM_RADIOBUTTON         = 0x0000002D
ROLE_SYSTEM_COMBOBOX            = 0x0000002E
ROLE_SYSTEM_DROPLIST            = 0x0000002F
ROLE_SYSTEM_PROGRESSBAR         = 0x00000030
ROLE_SYSTEM_DIAL                = 0x00000031
ROLE_SYSTEM_HOTKEYFIELD         = 0x00000032
ROLE_SYSTEM_SLIDER              = 0x00000033
ROLE_SYSTEM_SPINBUTTON          = 0x00000034
ROLE_SYSTEM_DIAGRAM             = 0x00000035
ROLE_SYSTEM_ANIMATION           = 0x00000036
ROLE_SYSTEM_EQUATION            = 0x00000037
ROLE_SYSTEM_BUTTONDROPDOWN      = 0x00000038
ROLE_SYSTEM_BUTTONMENU          = 0x00000039
ROLE_SYSTEM_BUTTONDROPDOWNGRID  = 0x0000003A
ROLE_SYSTEM_WHITESPACE          = 0x0000003B
ROLE_SYSTEM_PAGETABLIST         = 0x0000003C
ROLE_SYSTEM_CLOCK               = 0x0000003D

описание ролей


Этот скрипт будет проверять в этом меню:
http://i.imgur.com/tlM4NPE.png
По нажатию левой кнопки мыши он его не выполнит, а скажет что это в tooltip.(что бы он открывался надо к LButton добавить ~)


п.с вот сайт acc


И вот новая версия, теперь скрипт может просматривать и дочерние пункты меню:

+ открыть спойлер
Global Hwnd_menu

#if Acc_ObjectFromPoint(c).AccRole(c) = 33
    ~RButton::
    Hwnd_menu := ""
    WinWait ahk_class #32768, , 01
    if ErrorLevel
        return
    WinGet Hwnd_menu, ID,ahk_class #32768
return

#if Getpos()
lbutton::tooltip % Acc_ObjectFromPoint(c).AccName(c)

Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}


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")
}

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_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}

Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}

Acc_WindowFromObject(pacc)
{
    If    DllCall("oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
    Return    hWnd
}


Getpos(){
MouseGetPos, , , id
Acc := Acc_ObjectFromEvent(c,id,0, 0)
loop
    if Acc_Parent(    Acc_Parent(    Acc_Parent(    Acc ))).AccRole(c) = 9
        Acc := Acc_Parent(    Acc_Parent(    Acc_Parent(    Acc )))
    else
        break
    if (Acc_WindowFromObject(Acc) = Hwnd_menu)
        return 1
}    

45 (изменено: Доктор ТуамОсес, 2015-07-04 18:54:58)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

yalanne
Огромное спасибо.
Буду изучать.

To ALL
Эта тема про инструменты разработки AHK-скриптов

Поэтому такой вопрос.

Посоветуйте ХОРОШИЙ И УДОБНЫЙ текстовый макропроцессор (не уверен, что программа именно так называется, но я надеюсь Вы поймете о чем речь), с помощью которого можно было вместо длинючих идентификаторов типа oleacc\AccessibleObjectFromPoint писать свои, чтобы скрипт был написан в более "человеческом виде".

Например вместо вырвиглазного "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)
" написать  "фигня_А".

А после написания кода на таком вот своем языке (почти что "фене") запустить этот макропроцессор и он мне все мои макросы и описания макроподстановок развернет в код на AHK.

Нужен именно отдельный текстовый макропроцессор, а не приблуда, входящая в состав каких-то сред типа Microsoft Visual Studio и т.п.

46 (изменено: yalanne, 2015-07-04 21:00:23)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Доктор ТуамОсес, Закоментил код, надеюсь так понятнее.

47

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

yalanne
Спасибо огромное за Ваш труд и за Вашу помощь.
Он будет полезен не только мне но и будущим посетителям данной темы

48

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Народ! А насчет макропроцессора нашёл из продвинутых только GNU m4


Вы если знаете что-то про другие - постите сюда

49

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Участник Доктор ТуамОсес на неделю отправляется думать о правилах расстановки точек в конце предложений.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

50

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

yalanne пишет:

Сойдёт?

У меня этот код не работает. Запускаю, в блокноте нажимаю правую кнопку, появляется меню, нажимаю пункт «Вставить» — происходит просто вставка из буфера обмена. Windows 7 64 AHK 64.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

51

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Дык я для одного меню как пример делал), но если удалить одну строчку то везде со всеми меню будет действовать

вот:

+ открыть спойлер
Global Hwnd_menu
    ~RButton::
    Hwnd_menu := ""
    WinWait ahk_class #32768, , 01
    if ErrorLevel
        return
    WinGet Hwnd_menu, ID,ahk_class #32768
return

#if Getpos()
lbutton::tooltip % Acc_ObjectFromPoint(c).AccName(c)

Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}


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")
}

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_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}

Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}

Acc_WindowFromObject(pacc)
{
    If    DllCall("oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
    Return    hWnd
}


Getpos(){
MouseGetPos, , , id
Acc := Acc_ObjectFromEvent(c,id,0, 0)
loop
    if Acc_Parent(    Acc_Parent(    Acc_Parent(    Acc ))).AccRole(c) = 9
        Acc := Acc_Parent(    Acc_Parent(    Acc_Parent(    Acc )))
    else
        break
    if (Acc_WindowFromObject(Acc) = Hwnd_menu)
        return 1
}    

52

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Теперь если нажать правую кнопку и выбрать левой пункт меню — определяется. Но если снова нажать правую и выбрать другой пункт меню — не срабатывает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

53

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Ну ок немного ляп. Но если его в порядок привести нормально для коллекции будет?

54

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Думаю, да.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

55 (изменено: yalanne, 2015-07-07 02:32:41)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Вроде исправил косяки.
И сделал что бы на дочерних списках прописывался путь.

+ открыть спойлер
Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}


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")
}

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_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}

Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}

Acc_WindowFromObject(pacc)
{
    If    DllCall("oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
    Return    hWnd
}

Get32768(){
MouseGetPos, , , id
WinGetClass class,ahk_id %id%
if  (class = "#32768")
    return 1
}



#if Get32768()
LButton::
tName := []
Name := []
Acc := Acc_ObjectFromPoint(c)
tName.Insert(Acc.AccName(c))

loop
{
Acc:= Acc_Parent(    Acc    )
if (Acc.AccRole() = 9)
    tName.Insert(Acc.AccName())
if (Acc.AccRole() = "")
    break
}
tName.Remove(tName.MaxIndex())

loop % tName.MaxIndex()
name := (!name?"":"::::") tName[A_Index] name

tooltip % name

return

56

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Отлично, вроде всё работает. Для реального скрипта лучше оставить работоспособность меню, а названия прописывать, например, в трейтипе.

А теперь подкидываю идею для по-настоящему интересного скрипта: добавлять в любое стандартное меню любой программы свои пункты и отслеживать клики по ним. Как получать доступ к меню здесь были, вроде, темы.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

57 (изменено: yalanne, 2015-07-07 22:11:48)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Нашел вроде что бы пункты добавлять:

DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0x00000800)   ; MF_SEPARATOR   
DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0, "UInt", 0x1001, "Str", "Item 1")    
DllCall("DrawMenuBar", "UInt", hGui)  

но что то не получается добавить.


И вот тот код что бы нажатый пункт показывать трейтип:

+ открыть спойлер
Acc_Init()
{
    Static    h
    If Not    h
        h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}


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")
}

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_Parent(Acc) { 
    try parent:=Acc.accParent
    return parent?Acc_Query(parent):
}

Acc_Query(Acc) { ; thanks Lexikos - www.autohotkey.com/forum/viewtopic.php?t=81731&p=509530#509530
    try return ComObj(9, ComObjQuery(Acc,"{618736e0-3c3d-11cf-810c-00aa00389b71}"), 1)
}

Acc_WindowFromObject(pacc)
{
    If    DllCall("oleacc\WindowFromAccessibleObject", "Ptr", IsObject(pacc)?ComObjValue(pacc):pacc, "Ptr*", hWnd)=0
    Return    hWnd
}

Get32768(){
MouseGetPos, , , id
WinGetClass class,ahk_id %id%
if  (class = "#32768")
    return 1
}



#if Get32768()
~LButton::
tName := []
Name := []
Acc := Acc_ObjectFromPoint(c)
tName.Insert(Acc.AccName(c))

loop
{
Acc:= Acc_Parent(    Acc    )
if (Acc.AccRole() = 9)
    tName.Insert(Acc.AccName())
if (Acc.AccRole() = "")
    break
}
tName.Remove(tName.MaxIndex())
if WinActive( tName[tName.MaxIndex()] )
    tName.Remove(tName.MaxIndex())

loop % tName.MaxIndex()
name := (!name?"":"::::") tName[A_Index] name

TrayTip,, %  name

return

58

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

yalanne пишет:

Нашел вроде что бы пункты добавлять

Где нашли-то? Там полного кода не было?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

59

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Gui, Show, w444 h444, % " "
Gui, +HWNDhGui +ReSize 
OnMessage(0x112, "WM_SYSCOMMAND") 
  
hSysMenu := DllCall("GetSystemMenu", "UInt", hGui, "UInt", 0)      
DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0x00000800)   ; MF_SEPARATOR   
DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0, "UInt", 0x1001, "Str", "Item 1")    
DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0, "UInt", 0x1002, "Str", "Item 2")  
DllCall("AppendMenu", "UInt", hSysMenu, "UInt", 0, "UInt", 0x1003, "Str", "Item 3")     
DllCall("DrawMenuBar", "UInt", hGui)  
 
WM_SYSCOMMAND(wParam, lParam)
{ 
    If wParam between 0x1001 and 0x1003
    {  
        ToolTip % wParam
    }
}
Return

60

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker Так ты просто всё распиши, а за ним всё самое сложное, в коллекцию добавить не каждый сможет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

61 (изменено: teadrinker, 2015-07-08 01:34:16)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Ну, всему сразу не научишься. yalanne, там у вас используется функция GetSystemMenu. По её названию можно понять, что речь идёт о системном меню — это то, которое появляется, если кликнуть правой кнопкой по заголовку окна. В принципе, добавлять можно и туда, но оно редко используется. Лучше добавлять в обычный менюбар. Вот пример, добавляем дополнительный пункт со своим подменю в менюбар блокнота:

Menu, Submenu, Add, Item 1, Example
Menu, Submenu, Add, Item 2, Example
hSubmenu := GethMenu("Submenu")

if !hWnd := WinExist("ahk_class Notepad")  {
   Run, notepad.exe,,, PID
   WinWait, ahk_pid %PID%
   hWnd := WinExist("ahk_pid" PID)
}
hMenu := DllCall("GetMenu", Ptr, hWnd, Ptr)
DllCall("AppendMenu", Ptr, hMenu, UInt, MF_POPUP := 0x10, Ptr, hSubmenu, Str, "MyMenu")
DllCall("DrawMenuBar", Ptr, hWnd)
WinActivate
ExitApp

Example:
   Return

GethMenu(MenuName)
{
   Gui, New, +hwndhGui
   Menu, _MyMenuBar, Add, File, :%MenuName%
   Gui, Menu, _MyMenuBar
   hMenu := DllCall("GetMenu", Ptr, hGui, Ptr)
   hMenu := DllCall("GetSubMenu", Ptr, hMenu, Int, 0)
   Gui, Destroy
   Menu, _MyMenuBar, Delete, File
   Menu, _MyMenuBar, Delete
   Return hMenu
}

Меню не пропадает после завершения работы скрипта. Однако метки срабатывать не будут.
Можно также добавлять пункты в уже существующие подменю, попозже напишу, если не разберётесь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

62

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Но лучше так:

hSubmenu := DllCall("CreateMenu")
DllCall("AppendMenu", Ptr, hSubmenu, UInt, MF_STRING := 0, UInt, "", Str, "Item 1")
DllCall("AppendMenu", Ptr, hSubmenu, UInt, MF_STRING := 0, UInt, "", Str, "Item 2")

if !hWnd := WinExist("ahk_class Notepad")  {
   Run, notepad.exe,,, PID
   WinWait, ahk_pid %PID%
   hWnd := WinExist("ahk_pid" PID)
}
hMenu := DllCall("GetMenu", Ptr, hWnd, Ptr)
DllCall("AppendMenu", Ptr, hMenu, UInt, MF_POPUP := 0x10, Ptr, hSubmenu, Str, "MyMenu")
DllCall("DrawMenuBar", Ptr, hWnd)
WinActivate
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

63 (изменено: yalanne, 2015-07-08 13:56:41)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Acc не видит пункты в этом искусственном меню.

+ MyMenu

http://i.imgur.com/xiwaOum.jpg

+ любой другой

http://i.imgur.com/Za2W8Po.jpg

Следственно и мой скрипт не сможет их определить.

64

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Всё проще оказалось. Меню "умирает", когда скрипт завершает работу. Но определить его пункт, по которому кликнули, оказалось, можно и без Accessible:

hMyMenu := DllCall("CreateMenu")
DllCall("AppendMenu", Ptr, hMyMenu, UInt, MF_STRING := 0, UInt, "", Str, "Item 1")
DllCall("AppendMenu", Ptr, hMyMenu, UInt, MF_STRING := 0, UInt, "", Str, "Item 2")

if !hWnd := WinExist("ahk_class Notepad")  {
   Run, notepad.exe,,, PID
   WinWait, ahk_pid %PID%
   hWnd := WinExist("ahk_pid" PID)
}
hMenu := DllCall("GetMenu", Ptr, hWnd, Ptr)
DllCall("AppendMenu", Ptr, hMenu, UInt, MF_POPUP := 0x10, Ptr, hMyMenu, Str, "MyMenu")
DllCall("DrawMenuBar", Ptr, hWnd)
WinActivate
Return

~LButton::
   DllCall("GetCursorPos", Int64P, POINT)
   res := DllCall("MenuItemFromPoint", Ptr, hWnd, Ptr, hMyMenu, Int64, POINT)
   if (res >= 0)
      MsgBox, % res + 1
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

65

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Вот чего нашёл: Кибор - среда, специально заточенная для удобного написания скриптов для автоматизации действий на компьютере.

66 (изменено: yalanne, 2015-08-04 00:30:42)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

teadrinker, я сделал что бы в каждое контекстное меню добавлялось своя кнопка и что бы она работало вот пример:

#SingleInstance Force
#Persistent
SetBatchLines,-1
Global bt
HookProcAdr := RegisterCallback( "HookProc", "F" ), hWinEventHook := SetWinEventHook( 0x1, 0x17, 0, HookProcAdr, 0, 0, 0 )
SetWinEventHook(eventMin, eventMax, hmodWinEventProc, lpfnWinEventProc, idProcess, idThread, dwFlags) 
{
    DllCall("CoInitialize", Uint, 0)
    return DllCall("SetWinEventHook", Uint,eventMin    , Uint,eventMax    , Uint,hmodWinEventProc
    , Uint,lpfnWinEventProc, Uint,idProcess, Uint,idThread, Uint,dwFlags)    
}
HookProc( hWinEventHook, Event, hWnd, idObject, idChild, dwEventThread, dwmsEventTime )
{
if (Event = 6)
    {
    Winwait ahk_class #32768
    WinGetPos,x,y,w,h,ahk_id %hWnd%
    WinMove ahk_id %hWnd%,,%x%,%y%,%w%,% h+30
    Gui, Add, button,% "w" w " h30 x0 y" h " Left HWNDh_bt",тест
    DllCall("SetParent", "uint", h_bt, "uint", hWnd)
    }
}

Getbt_32768(){
MouseGetPos, , ,id ,ctrl
if (WinExist("ahk_class #32768") = id) and !(ctrl="") and (bt:=ctrl)
    return 1
}
return


#if Getbt_32768()
Lbutton::msgbox % bt

Конечно это не совсем контекстная кнопка а простая).

67

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Не, во-первых, сам подход не годится — если меню будет снизу экрана, кнопка будет за экраном (да и почему именно кнопка, а не новый пункт меню?), и зачем добавлять в каждое меню?; во-вторых ещё и написано криво, явно содрано с какого-то древнего поста времён ahk-basic. В таких штуках желательно разобраться перед применением.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

68 (изменено: NektoN95, 2015-08-04 08:07:47)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Вот чего нашёл: Кибор - среда, специально заточенная для удобного написания скриптов для автоматизации действий на компьютере.

Имхо, для написания скриптов для ОС и приложений Кибор не шибко-то превосходит AHK по удобству и широте возможностей.

P. S. Хотя в области ботописания для онлайн игр он впереди планеты всей благодаря функции анти-антикликера и возможности поиска движущихся обьектов...

69 (изменено: yalanne, 2015-08-04 11:01:08)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Посты по поводу контекстного меню в отдельную тему бы перенести, а то оффтоп.

70

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

NektoN95 пишет:

Имхо, для написания скриптов для ОС и приложений Кибор не шибко-то превосходит AHK по удобству и широте возможностей.

Не понял.
Кибор - это IDE, а AHK - язык программирования.
Т.е. Вы сравниваете тёплое с пушистым.

71

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Язык программирования Кибор имеет Си образный синтаксис.

Кибор - это язык, у него есть IDE заточенное соответственно только под него, причём тут вообще AutoHotkey?

Интегри́рованная среда́ разрабо́тки, IDE (англ. Integrated development environment) — система программных средств, используемая программистами для разработки программного обеспечения (ПО).

Вам собственно каких программных средств нехватает?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

72 (изменено: DD, 2019-04-14 01:13:08)

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Помню, на оф. форуме был скрипт, автоматически расставлявший отступы и правивший названия команд и тд, согласно принятому формату. Не будет ли ссылки на него? А то ни на компе, ни там найти не могу).

73

Re: AHK: Всё про инструменты для AutoHotKey (макрорекордеры, IDE и т.п.)

Первое что попалось в поиске.

Editors with AutoHotkey Support:
SciTE4AutoHotkey (Smart auto-indent)

AHK Auto Formatter?

+ DD