Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » AutoHotkey

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Открыть новую тему     Написать ответ в эту тему

chum2000

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

   
 
Актуальная версия: AutoHotkey 2.0.5 от 12 августа 2023
Версия для Windows XP | Changes from v1.1 to v2.0
 
Официальный сайт | Англоязычный форум | Архивный форум | Русскоязычный форум
Документация (англ.) | Документация и статьи (рус.) | История изменений
 
Подборка полезных скриптов | AutoHotkey + Total Commander
 

Цитата:
AutoHotkey — бесплатная программа с открытым исходным кодом для создания макросов и автоматизации, позволяющая упростить выполнение повторяющихся задач.
 
AutoHotkey позволяет изменить интерфейс практически любой программы. Имеет собственный скриптовый язык, специально нацеленный на лёгкое назначение и переназначение горячих клавиш.
 
AutoHotkey можно использовать для запуска программ, отправки текста, имитации мыши. Скриптовый язык позволяет управлять окнами, файлами и папками. Команды могут быть активированы горячими клавишами.
 
Также имеются возможности создания GUI, работы с реестром, использования собственного API окон для вызова DLL-файлов. Скрипты можно скомпилировать в EXE-файл и запускать на любом компьютере с Windows соответствующей версии.
 
Наиболее частое применение AutoHotkey:
- переназначение клавиш (глобально или у отдельных программ)
- управление мышью с помощью клавиатуры или джойстика
- слежение за системой, автоматическое выполнение некоторых действий по желанию пользователя, таких как напоминание, сканирование или резервное копирование
 

Всего записей: 505 | Зарегистр. 04-03-2004 | Отправлено: 00:28 02-06-2005 | Исправлено: Egor2020, 10:08 21-09-2023
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll 03:45 30-04-2013
Цитата:

Код:
 #If, CheckUp(getStyle, WinActive[b]("A")) [/b]And Not getStyle>>11&1

 
Спасибо, но AHK ругается: пишет, что, мол, ошибка в самой 1-й строке: #If, CheckUp(getStyle, WinActive("A")) And Not getStyle>>11&1  
 
 
 
P.S.
Давно хотел спросить, чем это так красиво раскрашен код? Подозреваю, что не вручную. Есть 100500+ прог, умеющих подсвечивать код, но AFAIK большинство из них не сохраняют вывод в BB-кодах.

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 10:03 30-04-2013 | Исправлено: oshizelly, 11:27 30-04-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Для начала лучше на кошечках потренируюсь, иначе вопросами задолбаю


Цитата:
PS. Пробовал ещё. Сдаюсь. Ничего рабочего так и не смог придумать  

Ну вот, а говорил "Гоп")
Все эти танцы вокруг курсора и т.п. к хорошему не приведут. Создай GUI, навесь кнопочки и функции, поверь, это не так и сложно, зато будет свое, да и опыт не помешает.
Что в итоге надо получить? Задавай вопросы, а мы ответим.

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 11:22 30-04-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Спасибо, но AHK ругается

Замечательно, что и в 2013 году встречаются пользователи не обновлявшие autohotkey с 2009 года. Так победим

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 14:21 30-04-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Монументально.
% "ahk_id"hWnd - это активное окно?
 

Цитата:
Что в итоге надо получить? Задавай вопросы, а мы ответим.

Как правильно записать этот скрипт? Две проверки If (вид курсора и неактивное окно), и если обе проверки выполняются - тогда блокируем клавиши.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 14:23 30-04-2013 | Исправлено: LonerDergunov, 20:20 30-04-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws 13:21 30-04-2013
Цитата:
Замечательно, что и в 2013 году встречаются пользователи не обновлявшие autohotkey с 2009 года.

Потому что при попытке обновления версии до текущей выводится страшное предупреждение, что некоторые скрипты, написанные под старую версию, могут оказаться несовместимыми с новой.
Но я понял замечание, да. Поставил сейчас псоледнюю версию, она не ругается на скриптOnMyDSeeAtAll. Всё работает, в текстовых полях клавиша Insert блокирована, а в файловых панелях Total Commander - работает.

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 15:39 30-04-2013 | Исправлено: oshizelly, 15:40 30-04-2013
Goolfen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что с этим делать? Подскажите пожалуйста.
 
Error at line 16.
Line Text: #z::Run www.autohotkey.com
Error: Invalid hotkey.
The program will exit.

Всего записей: 1 | Зарегистр. 01-05-2013 | Отправлено: 20:54 01-05-2013
OnMyDSeeAtAll



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
oshizelly
Цитата:
Подозреваю, что не вручную.

Использую SciTE-Ru:
   


LonerDergunov
Цитата:
% "ahk_id"hWnd - это активное окно?

Это параметр функции, аргументом которого был переданный дескриптор активного окна (WinActive("A")).

Цитата:
...если обе проверки выполняются - тогда блокируем клавиши.

Код:
#If, CheckUp(WinActive("A"))
   
Ins::
   
Numpad0::
   
NumpadIns::Return
 
CheckUp(hWnd)
{
   
WinGetClass,
className, % "ahk_id"hWnd
   
Return, className="TTOTAL_CMD" And A_Cursor="IBeam" ? True:False
}



Goolfen
Цитата:
Что с этим делать?

Просто используйте в записи виртуальные коды вместо именного названия. Здесь программа для быстрого определения информации по кодам. Соответственно Ваша запись должна выглядеть к примеру так:
Код:
#vk5A::Run www.autohotkey.com ; Z/Я клавиша записана в виде виртуального кода
; #sc2C::Run, % "www.autohotkey.com" ; та же самая комбинация, но Z/Я записан в виде скэн-кода
Запись в виде витуального или скэн кодов не требуется по отношению к тем клавишам, которые не меняются в результате смены раскладки клавиатуры, к примеру: Insert, PgUp, Down.

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 10:44 02-05-2013 | Исправлено: OnMyDSeeAtAll, 10:53 02-05-2013
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно ли с помощью AHK перехватить щелчок левой кнопкой мыши по значку Компьютер в меню Пуск и вместо Проводника запустить другой процесс?

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 11:33 02-05-2013
OnMyDSeeAtAll



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
#If, CheckUp()
   
LButton::
     
TrayTip,
% A_Hour ":"A_Min "."A_Sec, % "Do something..."
     
Sleep, 1500
     
TrayTip
     
Return
 
CheckUp()
{
   
MouseGetPos,,,
hWnd
   
WinGetClass, className, % "ahk_id"hWnd
   
WinGet, procName, ProcessName, % "ahk_id"hWnd
   
Return, className="Button" And procName="Explorer.exe" ? True:False
}

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 13:04 02-05-2013 | Исправлено: OnMyDSeeAtAll, 16:54 02-05-2013
Lovec



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Спасибо, пример интересный...  
Но мне нужно отловить нажатия не на саму кнопку "Пуск", а внутри меню "Пуск" на кнопку "Компьютер", "Панель управления" и т.д. Может по координатам курсора что ли...
Использую Windows 7 x64.

Всего записей: 1028 | Зарегистр. 29-10-2002 | Отправлено: 19:13 02-05-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
; 2 — номер пункта в меню. Нумерация сверху вниз, начинается с 1.
#if WinActive("ahk_class DV2ControlHost") && LV_GetHotItemIndex("SysListView323") = 2
    LButton::Run Notepad
 
LV_GetHotItemIndex(classNN) {
    SendMessage % LVM_GETHOTITEM := 0x1000 + 61, 0, 0, %classNN%
    itemIndex := ErrorLevel + 1
    if !itemIndex
        ControlGet itemIndex, List, Count Focused, %classNN%
    return itemIndex
}

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 20:33 02-05-2013 | Исправлено: creature_ws, 20:37 02-05-2013
OnMyDSeeAtAll



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
@creature_ws
Хороший код - спасибо.
@Lovec
Извините, не понял, что нужно с разу.

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 23:03 02-05-2013 | Исправлено: OnMyDSeeAtAll, 11:06 03-05-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Спасибо. Команда оказалась несколько сложнее, чем мне представлялось.
 
А можно ли отследить в Windows7/8 штатную функцию при перетаскивании окна (с указанным классом) за заголовок к левой или правой стороне экрана? При этом окно автоматически раскрывается на половину экрана и прилипает к боку экрана. При отпускании мыши - надо выполнить некоторые действия.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 20:53 04-05-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не могу разобраться, как перечислить несколько разных классов окон в директиве #IfWinNotActive.
Нашёл на офф-форума вот этот топик, предлагается через определение групп. Но, на первый взгляд, как-то очень уж сложно получается: определять группы, чтобы просто добавить один дополнительный класс. Нет ли более простых решений?
Пробовал просто перечислять классы через логический оператор OR, не работает.
Пробовал также ставить несколько строк с диективой #IfWinNotActive, работает только последняя из них.
 
Кстати, обратил внимание, что при класс окон некоторых приложений обозначается не интуитивно понятным буквенным описанием вроде TTOTAL_CMD или OperaWindowClass, а какими-то загадочными цифровыми кодами. Например, ReGet Delux обозначается ATL:00730608. В этом есть какой-то тайный смысл?

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 15:38 05-05-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но, на первый взгляд, как-то очень уж сложно получается

Неправда, это не сложно.
 

Цитата:
определять группы, чтобы просто добавить один дополнительный класс.

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

Цитата:
Нет ли более простых решений?  

Объединение требуемых окон в группу — правильное решение.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 19:02 05-05-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

creature_ws 18:02 05-05-2013
Цитата:
Вы так говорите, как будто определяете дополнительный класс каждые две минуты,  

Ну, может и не каждые две минуты, но несколько раз в день - это реально, по крайней мере, в период отладки.
 

Цитата:
, или вам известен десяток скриптовых языков в которых для перечисления окон по классам в директиве IfWinNotActive используется оператор OR.

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

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 19:27 05-05-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Просто вариант с использованием логических операторов казался логичным.  

Вариант логичен, но «это работает не так». Команды autohotkey, «работающие с окнами», подразумевают указание в параметре, определяющем признаки окна, указание признаков одного окна. "By design" и менять что-то уже поздно.
Создание группы окон это аналог «использования оператора OR». ahk_group указывает на множество окон предварительно определённое использованием команды GroupAdd с указанием нескольких признаков одного типа.
Возможности, предоставляемые GroupAdd, шире, чем то, что можно «накодить» самому в качестве замены.

Код:
#if GetActiveWindowClass() && (activeWindowClass = "TTOTAL_CMD" || activeWindowClass = "OperaWindowClass")
    Space::MsgBox
 
GetActiveWindowClass() {
    global activeWindowClass
    WinGetClass activeWindowClass, A
    return true
}

Оператор OR используется? — используется. Лучше использовать подобный подход? — нет.

Код:
GroupAdd SomeGroupName, ahk_class TTOTAL_CMD
GroupAdd SomeGroupName, ahk_class OperaWindowClass
 
#IfWinActive ahk_group SomeGroupName
    Space::MsgBox

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 20:21 05-05-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws 19:21 05-05-2013
Цитата:
Создание группы окон это аналог «использования оператора OR».  
Возможности, предоставляемые GroupAdd, шире, чем то, что можно «накодить» самому в качестве замены.

Согласен, убедили. Теперь и до меня дошло, что добавление групп не так уж сложно, как мне показалось поначалу. Просто мне нужно было увидеть пару примеров, чтобы уяснить алгоритм. Лучше ведь поздно, чем никогда?
А куда по-правильному надо совать строки с определением групп: в начало скрипта или непосредственно перед директивой, использующей эту группу? Я сейчас проверил эмпирически, вроде бы работает одинаково в обоих случаях. Но как более правильно?
 
P.S.
Всё-таки есть какой-нибудь мистический смысл в том, что одни классы окон обозначаются словами (например, TTOTAL_CMD или OperaWindowClass), а другие - цифровыми кодами (например, ReGet Delux кодом ATL:00730608). Или это вопрос того типа, на который и сто мудрецов...

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 22:01 05-05-2013
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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


Цитата:
А почему буквы черные и все такие разные?

 
Представьте, что класс окна подобен фамилии. Тогда «словами» обозначаются Ивановы, Петровы, а цифрами — разнообразнейшие Мукхопадхьяй и Мгалоблишвили. Вид непривычен, суть одна.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 22:30 05-05-2013 | Исправлено: creature_ws, 22:37 05-05-2013
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Наваял с коллективной помощью уважаемых гуру вот такой архисложный скрипт:

Код:
#persistent
#If (A_Cursor = "IBeam")
GroupAdd DisableInertMode, ahk_class TTOTAL_CMD  
GroupAdd DisableInertMode, ahk_class ATL:00730608
#IfWinNotActive ahk_group DisableInertMode
{
Insert::return
NumpadIns::return
}

Как ни странно, он работает
 
Однако выяснился один странный момент. Для удобства вынес его в отдельный DisableInsert.ahk файл. Когда запускаю этот файл вручную, то всё нормально.  
Если же запускать этот файл из моего "главного" файла AHK scripts.ahk при помощи команды #Include, то он тоже работает, но игнорирует исключения группы классов, заданные в 3-й и 4-й строках.
Что я делаю не так

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 13:56 08-05-2013 | Исправлено: oshizelly, 13:57 08-05-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Компьютерный форум Ru.Board » Компьютеры » Программы » AutoHotkey


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru