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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Krot66



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Stone_01
В указанном варианте клавиши букв нажимаются последовательно с зажатым Ctrl. В принципе ahk не рассчитана на посылку одновременно нажатий нескольких клавиш. Но можно попробовать (Send/SendInput):  

Код:
{Ctrl down}{SC26 down}{SC18 down}{SC19}{SC18 up}{SC26 up}{Ctrl up}

 

Всего записей: 1193 | Зарегистр. 10-12-2007 | Отправлено: 16:28 04-10-2019
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Stone_01
Насколько мне известно, штатно хоткей типа Ctrl+L,O,P не поставить. Либо ставить Ctrl+L, к примеру, и отлавливать состояние O и P, либо отслеживать нажатия всех клавиш и ловить требуемое сочетание.
Как это сделать - не подскажу.

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 16:56 04-10-2019 | Исправлено: iglezz, 16:57 04-10-2019
Stone_01



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Krot66
Спасибо за предложенный вариант.
Я попробовал вашу строчку. Выдало ошибку в строке.
А "(Send/SendInput):" тоже надо было прописывать ?  
 
iglezz
Спасибо за ответ.

Всего записей: 352 | Зарегистр. 22-12-2017 | Отправлено: 00:13 05-10-2019
totnetot



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

Цитата:
Я всегда пользуюсь такой фигней http://forum.script-coding.com/viewtopic.php?id=5690

Есть скрипт поинтересней
Вкладка Button.
Последние нажатые клавиши копируются в буфер правой кнопкой мыши на том варианте который больше всего подходит.
Иногда играет роль заглавные или прописные.
Например в одной программе у меня заработала комбинация клавиш только после того как заменил заглавную на прописную.
 
 
Добавлено:
Stone_01
попробуйте этот скрипт. он выдает сразу готовый код для AHK

Всего записей: 410 | Зарегистр. 16-03-2013 | Отправлено: 08:41 05-10-2019
gerxer

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
totnetot
Да такой интересный вариант спасибо.
 
У меня периодически залипает шифт, как узнать почему это происходит? В Винде все вроде бы поотключал.

Всего записей: 565 | Зарегистр. 19-06-2014 | Отправлено: 10:58 07-10-2019
ziFFir

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

Всего записей: 552 | Зарегистр. 19-10-2009 | Отправлено: 17:26 04-11-2019 | Исправлено: ziFFir, 22:08 04-11-2019
NikosColev



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

Цитата:
Также имеются возможности создания GUI...

Подскажите, плз, сабж позволит создать панельку с кнопками задающими размер и положение активного окна?
 
Добавлено:
Погуглил, классная штука, явно позволит...
 
Надеюсь что с такой панелькой разберусь самостоятельно, но вот с такой хотелкой точно сам не разберусь: возможно ли написать скрипт позволяющий перемещение активного окна не только за его заголовок по нажатию ЛКМ, но без использования дополнительных клавиш, - как это реализовано в AltDrag? - в идеале, кликнул по иконке в трее, включается перемещение по клику ЛКМ в любом месте окна, кликнул ещё скрипт отключился, вернулось дефолтное поведение приложений.

Всего записей: 1256 | Зарегистр. 31-07-2002 | Отправлено: 00:15 03-01-2020 | Исправлено: NikosColev, 01:19 03-01-2020
creature_ws



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно. Чтобы окно перемещалось за курсором нужно в цикле отслеживать изменения положения курсора и менять положение окна на соответствующее количество пикселей.
Координаты курсора можно получить от MouseGetPos, окно перемещать при помощи WinMove.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 04:32 03-01-2020
yuriko1158

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а эта программа может одну кнопку привязать к пяти кнопкам?
в одной игре не хватает пальцев

Всего записей: 1078 | Зарегистр. 27-02-2015 | Отправлено: 19:40 11-01-2020
Aleksks

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прошу подсказать, почему не получается заставить работать экспериментальный, но очень простой по задумке скрипт:
 
1) есть необходимость получить переназначеную клавишу (если курсор находится над конкретной частью программы xyplorer)
 
2) но скрипт работает только над всем окном программы xyplorer, например, если в скрипте среди прочего прописано:
If MouseIsOver("ahk_class ThunderRT6FormDC")
 
3) и при этом скрипт отказывается работать, если прописать в нём более конкретные данные (тоже взятые из программы win-spy)
 
4) вот примеры частей окна xyplorer'а, над которыми должно выполняться действие:
 
часть 1) class: ThunderRT6PictureBoxDC
часть 1) classNN: ThunderRT6PictureBoxDC70
часть 1) handle: всегда разный
часть 1) control ID: 0x109
 
часть 2) class: ThunderRT6PictureBoxDC
часть 2) classNN: ThunderRT6PictureBoxDC60
часть 2) handle: всегда разный
часть 2) control ID: 0xF8
 
5) вот пример части окна xyplorer'а, над которой не должно выполняться это же действие:
 
часть 3) class: ThunderRT6PictureBoxDC
часть 3) classNN: ThunderRT6PictureBoxDC71
часть 3) handle: всегда разный
часть 3) control ID: 0x10C
 
но вообще всё несколько проще, поскольку действие должно выполняться только в программе xyplorer, и только в тех двух её частях/зонах, упомянутых выше (там, где DC70 и DC60)
 
6) вот сам скрипт в том виде, в котором есть на данный момент:

Код:
~WheelUp::
if a_timesincepriorhotkey > 300   ; re-set count if 300 ms passed since last scroll
count = 0   ; set var to 0
count++   ; add 1 to var
If MouseIsOver("ahk_class ThunderRT6FormDC")
If (count < 2)   ; this is other problem (this line does not work as intended, for some reason)
 {
      SetMouseDelay, -1
      SendEvent,{Click down}
      SendEvent,{Click up}
      SendEvent,{Click down}
      SendEvent,{Click up}
; count = 0   ; as it turned out, this line gives nothing
 }
return
 
MouseIsOver(WinTitle) {
MouseGetPos,,, Win
return WinExist(WinTitle . " ahk_id " . Win)
}

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 22:18 11-01-2020
creature_ws



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

Код:
MouseIsOverControl(classNN) {
    MouseGetPos,,,, currentClassNN
    return InStr(classNN, currentClassNN)
}
 
#If MouseIsOverControl("ThunderRT6PictureBoxDC70 ThunderRT6PictureBoxDC60")
    ~WheelUp::
 
        return

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 10:50 12-01-2020
Aleksks

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws, спасибо
этот вариант явно помог с частями окна xyplorer'а
 
но такой скрипт пока использовать невозможно: я сразу заметил, что почему-то имеется минимум 1 побочный эффект
в firefox'е перестали нормально переключаться табы (колесом мыши), и дело точно в этом новом варианте скрипта, в котором появилась строка:
MouseIsOverControl(classNN)
 
причём происходит это и когда xyplorer в фоне, и когда он вообще закрыт
попробовал несколько вариантов, но пока не получилось это исправить
 
на всякий случай вот данные по firefox'у:
class: MozillaWindowClass
classNN: N/A
control ID: 0x0

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 12:07 12-01-2020
creature_ws



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

Цитата:
использовать невозможно

Значит не судьба.

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 13:47 12-01-2020
Aleksks

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так а в чём может быть причина такого поведения скрипта? ведь никакой логике не поддаётся происходящее, это в чистом виде дефект какой-то
 
firefox беспроблемно работает, если прописать строку:
If MouseIsOver("ahk_class ThunderRT6FormDC")
но тогда скрипт не действует как надо
 
скрипт отрабатывает правильно, если прописать строку:
#If MouseIsOverControl("ThunderRT6PictureBoxDC70 ThunderRT6PictureBoxDC60")
но при этом действие почему-то распространяется и на firefox, в котором проявление скрипта является неприемлемым
 
после многих попыток решение найти не удалось, но в итоге вроде нормально работает вот такой странный вариант, созданный за много часов методом тыка:
Код:
#If not MouseIsOverControl("") && #If MouseIsOverControl("ThunderRT6PictureBoxDC70 ThunderRT6PictureBoxDC60") && not MouseScreenRight()
WheelUp::
WheelDown::
if a_timesincepriorhotkey > 100
count = 0
count++
If (count < 2)
 {
      SetMouseDelay, -1
      SendEvent,{Click down}
      SendEvent,{Click up}
      SendEvent,{Click down}
      SendEvent,{Click up}
 }
return
 
MouseIsOverControl(classNN) {
    MouseGetPos,,,, currentClassNN
    return InStr(classNN, currentClassNN)
}
 
MouseScreenRight() {
CoordMode, Mouse, Screen
MouseGetPos, mX
if ( abs(A_ScreenWidth-mX) <= 1 )
      return true
return false
}

попутно решались и другие возникающие проблемы, для решения которых:
1) ~WheelUp превратился в WheelUp
2) была добавлена целая секция "MouseScreenRight" (чтобы скрипт не работал, если курсор находится над xyplorer'ом на самом правом краю экрана - это нужно для удобной регулировки громкости в системе)
3) MouseIsOverControl("") было добавлено для обхода (не решения) проблемы, связанной с firefox'ом
 
мне будет полезно узнать, если в этом варианте скрипта есть что-то совсем неоптимальное/неправильное

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 16:59 12-01-2020 | Исправлено: Aleksks, 06:13 13-01-2020
Aleksks

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

Код:
Loop {
WinWaitActive, ahk_exe prog.exe
send ^8
WinWaitNotActive, ahk_exe prog.exe
}

нужно, чтобы при активации окна конкретной программы в ней нажималось ctrl 8

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 11:33 27-01-2020
helbvtynec

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksks
Для начала проверить работает ли ваш Send в данном случае вообще.
На практике лучше использовать SendInput и иногда для пущей надёжности всяческие конструкции вроде:  
sendinput {ctrl down}8
sleep 50
sendinput {ctrl up)
 
С AHK в целом следует учитывать не только последовательность действий, но и время: много когда добавление короткого сна между шагами решает проблемы «нерабочести».

Всего записей: 414 | Зарегистр. 19-03-2008 | Отправлено: 13:49 27-01-2020
Aleksks

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
helbvtynec
это был просто наиболее короткий пример; на самом деле основным вариантoм являeтся sendinput ^8
 
а вообще мне бы в идеале наоборот, с использованием WinWaitNotActive и
ControlSend,ahk_parent, {Ctrl down}8{Ctrl up},ahk_exe prog.exe
вместо WinWaitActive и sendinput ^8
 
я подумал, что с остальными деталями получится позднее разобраться самому (но тут пока не работает самое примитивное и основное)
 
иными словами, не работает вообще ничего из:
send ^8
sendinput ^8
ControlSend,ahk_parent, {Ctrl down}8{Ctrl up},ahk_exe prog.exe
 
 
добавлено позднее:
вот этот вариант выполняется (но только если в скрипте другого ничего нет):

Код:
Loop {
WinWaitNotActive, ahk_exe prog.exe
if ErrorLevel
sleep 10
else
sleep 1000
ControlSend,ahk_parent, {Ctrl down}8{Ctrl up},ahk_exe prog.exe
}

в любом случае почему-то ControlSend не срабатывает (когда нажимается ctrl 8: фокус переключается на это окно, хотя этого происходить не должно)

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 14:06 27-01-2020 | Исправлено: Aleksks, 14:44 27-01-2020
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksks
Не работают именно
Цитата:
send ^8
sendinput ^8
ControlSend,ahk_parent, {Ctrl down}8{Ctrl up},ahk_exe prog.exe

или любые другие команды тоже?

Всего записей: 1521 | Зарегистр. 18-02-2003 | Отправлено: 14:50 27-01-2020
Aleksks

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iglezz
на данный момент 2 проблемы (упомянуты в конце предыдущего моего сообщения)

Всего записей: 127 | Зарегистр. 25-04-2008 | Отправлено: 15:07 27-01-2020
aist102

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!  
Объясните, Пожалуйста, почему в моём скрипте, в запущенной игре,  
при нажатии Numpad1, выполняется только первая строка, - открывается консоль в игре?
Остальные строки не выполняются:
 
Numpad1::Send, {vkc0}  
SetKeyDelay 200
sleep 2000
Send, sys cheats 468 {Enter}
sleep 2000
Send, cheat lord {Enter}
sleep 2000
Send, {vkc0}
return
 
А если эти действия задаю на отдельные клавиши Numpad2 и Numpad3,  
то при их последующем нажатии, всё выполняется:  
 
Numpad1::Send, {vkc0}  
SetKeyDelay 200
sleep 2000
Numpad2::Send, sys cheats 468 {Enter}
sleep 2000
Numpad3::Send, cheat lord {Enter}
sleep 2000
Send, {vkc0}
return

Всего записей: 3 | Зарегистр. 14-02-2020 | Отправлено: 15:32 14-02-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 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