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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LonerDergunov 16:25 10-06-2013
Цитата:
%comspec% /k start ......  
 Хотя в данном случае start вообще не нужен, достаточно просто:  
 "C:\Program Files\AutoHotkey\AutoHotkey.exe" "D:\My Documents\AutoHotkey.ahk"

Чего-то я не так делаю. Или, может, объяснил ситуацию не очень внятно.
Одна строка была приведена в моём предыдущем посте как образец, а вообще-то в этом батнике их несколько.
Однако при использовании префикса %comspec% /k запускается только скрипт из первой строки, а последующие строки игнорируются.
Пробовал писать его и в начале только первой строки, и в начале каждой. Результат всё равно один и тот же: запускается только скрипт из первой строки.  
 
А если убрать команду start, то вообще выдаётся ошибка: нет, мол, такой внутренней команды. И ведь не поспоришь, действительно нет такой команды
 
А окно консоли так и остаётся висеть.
 
 

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 00:42 11-06-2013 | Исправлено: oshizelly, 00:46 11-06-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
удалено. предыдущее сообщение поправил.
ответил в личку.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 01:29 11-06-2013 | Исправлено: LonerDergunov, 01:29 11-06-2013
Alex22T

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имеются три скрипта:
Код:
#!F12::
Send {Home}
Send {Shift Down}
Send {End}
Send {Shift Up}
Send ^c

Код:
#!F11::
Send {Shift Down}
Send {End}
Send {Shift Up}
Send ^c

Код:
#!F10::
Send {Shift Down}
Send {Home}
Send {Shift Up}
Send ^c

Работают нормально. Но если их объединить в один, посредством #Include,
Код:
#Include c:\Program Files (x86)\zz_select\select_01b.ahk
#Include c:\Program Files (x86)\zz_select\select_02b.ahk
#Include c:\Program Files (x86)\zz_select\select_03b.ahk
не хотят - первый работает криво, второй вообще не работает, третий - нормально.
 
Подскажите, плиз, почему они конфликтуют и как правильно их объединить в один скрипт(если это возможно).

Всего записей: 379 | Зарегистр. 23-04-2004 | Отправлено: 18:16 12-06-2013 | Исправлено: Alex22T, 18:19 12-06-2013
creature_ws



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

Код:
#!F12::Send {Home}+{End}^{vk43}
#!F11::Send +{End}^{vk43}
#!F10::Send +{Home}^{vk43}
 

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 21:03 12-06-2013
Alex22T

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws
Работает! Спасибо!
 
Я сначала делал так:
Код:
#!F12::
Send {Home}
Send +{End}
Send ^с
В результате, Shift нажимался одновременно с End, выделение строки не происходило, поэтому добавил Down и Up. Не пойму, почему так? Может потому, что код не в одну строку?

Всего записей: 379 | Зарегистр. 23-04-2004 | Отправлено: 00:45 13-06-2013 | Исправлено: Alex22T, 00:46 13-06-2013
aidomars



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

Цитата:
Может потому, что код не в одну строку

Это без разницы.

Цитата:
Shift нажимался одновременно с End, выделение строки не происходило

Чтобы удерживать нажатой или отпустить клавишу, поместите в фигурные скобки её имя и слово Down (вниз) или Up (вверх). Например:  
 
Send {b down}{b up}
Send {TAB down}{TAB up}
Send {Up down}  ; Нажать клавишу "Стрелка вверх".
Sleep 1000  ; Держать её нажатой 1 секунду.
Send {Up up}  ; Отпустить.

 

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 07:16 13-06-2013
Alex22T

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aidomars
Спасибо за подробное объяснение.
 
Но если
Цитата:
Это без разницы

 почему так работает
Код:
#!F12::Send {Home}+{End}^{vk43}  
#!F11::Send +{End}^{vk43}  
#!F10::Send +{Home}^{vk43}

а так нет
Код:
#!F12::  
Send {Home}  
Send +{End}  
Send ^{vk43}
 
#!F11::  
Send +{End}  
Send ^{vk43}
 
#!F10::  
Send +{Home}  
Send ^{vk43}
Народ хочет разобраться
 
 
 

Всего записей: 379 | Зарегистр. 23-04-2004 | Отправлено: 01:36 14-06-2013 | Исправлено: Alex22T, 01:39 14-06-2013
aidomars



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

Цитата:
а так нет

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

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 07:34 14-06-2013
Alex22T

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aidomars
Вот он, последний штрих! Теперь все работает.
Спасибо!

Всего записей: 379 | Зарегистр. 23-04-2004 | Отправлено: 23:56 14-06-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, каким образом можно заблокировать кнопку мыши над определёнными окнами/контролам
Вот например такой случай - при открытом окне Тотала заблокировать клик левой кнопки мыши по определённым контролам. Вот такая конструкция не работает:

Код:
#NoEnv
#NoTrayIcon
#Persistent
#SingleInstance force
 
#IfWinActive, ahk_class TTOTAL_CMD
  LButton::
  {
     ControlGetFocus, aControl, ahk_class TTOTAL_CMD
     if ((aControl = "THeaderClick1") || (aControl = "THeaderClick2"))
       Return
     else
       Send, {LButton}
  }
  Return

Мало того, что на контроле клик срабатывает, так ещё и в остальных контролах окна левая кнопка перестаёт работать как надо (двойной клик не срабатывает, перетаскивание с зажатой ЛКМ не работает...).

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 21:48 15-06-2013
OnMyDSeeAtAll



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

Код:
#If, CheckUp()
   
LButton::Return
 
CheckUp()
{
   
MouseGetPos,,,
winID, nameControl
   
WinGetClass, winClass, % "ahk_id"winID
   
Return, winClass="TTOTAL_CMD" And nameControl~="THeaderClick(1|2)" ? True:False
}

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 12:20 16-06-2013
LonerDergunov



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Спасибо. Ваши лаконичные и в то же время ёмкие решения продолжают меня поражать.

Всего записей: 2972 | Зарегистр. 11-07-2007 | Отправлено: 19:27 17-06-2013
PPavlukha

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему не работает (и как правильно сделать) конструкция:
#IfWinActive ahk_class xxx || #IfWinActive ahk_class yyy
<CODE>
 
Код выполняется только во втором окне. Если оно активно, конечно.

Всего записей: 38 | Зарегистр. 20-07-2008 | Отправлено: 22:17 18-06-2013
vadim3sh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте
 
Прошу прощения за, наверное, тупой вопрос.. Может быть кто-то может помочь понять принцип использования "Return" после "Loop". Никак не получается разобраться. Скрипты иногда с Return, иногда без.
 
Скрипт из учебника
 

Код:
 
F7::
Loop 3
{
    MsgBox Это окошко будет показано три раза.
}
Return
 

 
работает одинаково и без Return
 
Спасибо

Всего записей: 457 | Зарегистр. 28-01-2006 | Отправлено: 03:10 19-06-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vadim3sh
Return это окончание действия горячей клавиши. В примере видно, что после Return нет больше ничего, сл-но Return необязателен.
А вот тут он нужен, иначе скрипт продолжит работу:
Код:
 
F7::
Loop 3
   MsgBox Это окошко будет показано три раза.
Return
F8::
Loop 3
   MsgBox Это окошко будет показано три раза.
 

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 08:43 19-06-2013
vadim3sh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
О, спасибо..  
Этот вариант не додул. А я уже сел писать, что понял все сам..  
 Я так понимаю, что еще он необходим,  если количество циклов не задано (просто Loop), а внутри фигурных скобок есть условие и брейк после выполнения этого условия
 

Код:
;MButton long time = alt+c
~MButton::
TimeButtonDown = %A_TickCount%
; Wait for it to be released
Loop
{Sleep 10
   GetKeyState, MButtonState, MButton, P
   if MButtonState = U  ; Button has been released.
      break
   elapsed = %A_TickCount%
   elapsed -= %TimeButtonDown%
   if elapsed > 600  ; Button was held down long enough
   {Send !{vk43}
           exit
          }
   }
      return

 
как то так.. (эт я для CLCL из кусков слепил)  
Спасибо еще раз

Всего записей: 457 | Зарегистр. 28-01-2006 | Отправлено: 10:46 19-06-2013
aidomars



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

Цитата:
Я так понимаю, что еще он необходим,  если количество циклов не задано  

Не совсем так. Break это выход из Loop, т.е. потом программа продолжится пока не встретится Return или до окончания кода, а Return это выход из горячей клавиши или сам останов программы.

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 11:05 19-06-2013
PPavlukha

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

Цитата:
PPavlukha
 
Почему не работает (и как правильно сделать) конструкция:
#IfWinActive ahk_class xxx || #IfWinActive ahk_class yyy
<CODE>
 
Код выполняется только во втором окне. Если оно активно, конечно.


Всего записей: 38 | Зарегистр. 20-07-2008 | Отправлено: 22:41 19-06-2013
aidomars



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PPavlukha
#IfWinActive только последний работает.

Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 02:18 20-06-2013
OnMyDSeeAtAll



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
@PPavlukha Тут несколько вариантов как можно оформить условие соответствия:
Код:
#IfWinActive ahk_class Notepad
   
~LButton::
     
TrayTip,,
% "condition is match"
     
Sleep, 1250
     
TrayTip
     
Return
#IfWinActive
ahk_class CalcFrame
   
~LButton::
     
TrayTip,,
% "condition is match"
     
Sleep, 1250
     
TrayTip
     
Return
#IfWinActive
   
~LButton::
     
TrayTip,,
% "do something else"
     
Sleep, 250
     
TrayTip
     
Return

Код:
GroupAdd, myGroup, ahk_class Notepad
GroupAdd, myGroup, ahk_class CalcFrame
#IfWinActive ahk_group myGroup
   
~LButton::
     
TrayTip,,
% "condition is match"
     
Sleep, 1250
     
TrayTip
     
Return

Код:
#If (WinActive("ahk_class Notepad")) Or (WinActive("ahk_class CalcFrame"))
   ~
LButton::TrayTip,,
% "match condition"

Код:
SetTitleMatchMode, RegEx
#If WinActive
("ahk_class Notepad|CalcFrame")
   ~
LButton::TrayTip,,
% "match condition"

Код:
#If CheckUp()
   ~
LButton::
     
TrayTip,,
% "condition is match"
     
Sleep, 1250
     
TrayTip
     
Return
 
CheckUp()
{
   
WinGetClass,
winClass, A
   
Return, winClass~="Notepad|CalcFrame" ? True:False
}

@aidomars "Косяк" тут на лицо конечно...

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 03:06 20-06-2013 | Исправлено: OnMyDSeeAtAll, 15:34 14-08-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