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

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



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll, я имел ввиду, что действия скрипта не должны распространяться за пределы активного окна.
 
Вобщем, разобравшись поглубже в AutoHotkey, я переработал свой код. Оказывается, всё можно сделать проще. Плюс я ещё усовершенствовал его.
Код
 
Что он делает: при нажатии в проводнике СКМ (средней кнопки мыши) срабатывает F5. Чтобы перейти в другой режим, нужно 2 раза кликнуть СКМ, и тогда F5 будет срабатывать после отпускания ЛКМ. Чтобы вернуться в предыдущий режим, нужно снова 2 раза кликнуть СКМ.
Для чего нужно: в Windоws 7 в проводнике происходит автоматическая сортировка. Программа Folder Options X её отключает, но при этом возникает баг - после перемещения файлов или папок при попытке открыть их открывается совсем не то. Приходится сначала "Обновить", а затем открывать. И вот как раз данный код упрощает это обновление
Либо колёсиком, либо автоматически после перемещения.
 
Добавлено:
Нашёл небольшую ошибку: если за 500 мсек успеть 2 раза кликнуть СКМ (чтобы перейти в "режим 2") и нажать ЛКМ, то перейдёт в "режим 2", а затем обратно в "режим 1" (чего быть не должно). Как это можно исправить?

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 13:36 19-02-2014 | Исправлено: Cryzer, 13:42 19-02-2014
OnMyDSeeAtAll



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

Код:
Menu, Tray, Tip, % "mode "mode:=0
 
~MButton::
   
If WinActive("ahk_class CabinetWClass")
     
If A_TimeSincePriorHotkey
Between 0 And 500
         
ShowTip(mode^=1)
     
Else If
Not mode
         
Send, {F5}
   
Return
 
~LButton::
   
KeyWait, LButton
   
If WinActive("ahk_class CabinetWClass")
And mode
     
Send, {F5}
   
Return
 
ShowTip(p1, p2:=750)
{
   
Menu,
Tray, Tip, % "mode "p1
   
TrayTip,, % "mode "p1
   
Sleep, p2
   
TrayTip
}

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 02:13 20-02-2014 | Исправлено: OnMyDSeeAtAll, 02:29 20-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Спасибо, работает чётко!
Единственное, во время отображения TrayTip не срабатывает (из-за паузы) кнопка ~MButton:: в скрипте. Возможно ли это исправить?
 
Добавлено:
И ещё спрошу: может ли AutoHotkey определить, что после зажатия ЛКМ (в проводнике) под курсором выделилась(находится) папка/файл?
Было бы идеально, если бы обновление в "mode 1" происходило только после перемещения папки/файла)

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 18:59 20-02-2014 | Исправлено: Cryzer, 19:39 20-02-2014
OnMyDSeeAtAll



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

Цитата:
...во время отображения TrayTip не срабатывает (из-за паузы) кнопка ~MButton...
АХК однопоточен. И потом, если без паузы, как отлавливать в череде кликов двойной?
Цитата:
Возможно ли это исправить?
Ну коли Вы так спешите можно сделать паузу меньше.
Цитата:
...может ли AutoHotkey определить, что после зажатия ЛКМ (в проводнике) под курсором выделилась(находится) папка/файл?
Может.
Цитата:
Было бы..., если бы...
Ну так что Вам мешает довести до идеала?, почти всё, что нужно уже на руках. Пробуйте, не будет получаться что-либо, соберём коллегию, обмозгуем.

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 01:28 21-02-2014
Cryzer



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

Цитата:
Ну коли Вы так спешите можно сделать паузу меньше.

Я именно так и поступил)

Цитата:
Может.

Классная штука, этот AutoHotkey .
Я правильно понял, что приведённый код должен отображать в трее выделенные папки? Если да, то у меня он ничего не отобразил... Проверил на Win7, WinXP и с последним АХК (1.1.14.03).

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 11:47 21-02-2014 | Исправлено: Cryzer, 11:49 21-02-2014
OnMyDSeeAtAll



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

Цитата:
...у меня он ничего не отобразил...
Интерпретатор (АХК) должен выдать сообщение об ошибке (если таковая имеется), пример.
Если в сообщении пишет - Error:  0x80040154 - Class not registered, тогда правим код.

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 15:43 21-02-2014 | Исправлено: OnMyDSeeAtAll, 16:36 21-02-2014
oshizelly



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сорри, ошибся темой, не ту кнопку нажал.

Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 17:03 21-02-2014 | Исправлено: oshizelly, 17:04 21-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll
Я понял, в чём проблема. Программа Folder Options X что-то делает в системе, после чего Ваш код не срабатывает, как надо. Если в ней отключить все настройки (в т.ч. вернуть автоматическую сортировку), то код начинает работать нормально (причём обе версии) и в трее всё выводится...
Жалко... Но всё равно спасибо! Буду пытаться найти решение)

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 18:15 21-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll, а можно попросить Вас подправить последний код?
Если я правильно понял, в Windоws 7 для отключения автоматической сортировки файлов и папок DirectUIHWND заменяется на SysListView32 (не очень представляю, что это такое) (судя по всему, программа Folder Options X как раз это и делает), а в Вашем коде присутствует "DirectUIHWND3". Может быть в этом причина?
Как нужно изменить код, чтобы работало для SysListView32? (пробовал заменить на это слово - не помогло)

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 17:59 24-02-2014 | Исправлено: Cryzer, 18:01 24-02-2014
OnMyDSeeAtAll



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

Цитата:
Как нужно изменить код, чтобы работало для SysListView32?

Код:
; ...
;   And classNN="DirectUIHWND3")
   
And
classNN~="DirectUIHWND3|SysListView321")
; ...

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 21:18 24-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll, спасибо! Теперь всё работает!

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 11:07 25-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возник ещё такой вопрос. В сети ответа не нашёл...
 
Как в текущей папке проводника выделить находящиеся в ней файлы и/или папки, зная их имена? Выделить нужно только те, чьи имена заданы. Возможно ли такое?
Зачем нужно: после перемещения файлов или папок (при отключённой автоматической сортировке) их выделение иногда сбрасывается, поэтому хотелось бы его вернуть обратно.
В сети нашёл один код, возвращающий полные имена выделенных файлов/папок (функция Explorer_GetSelected() ).
Осталось только научиться их выделять по именам.

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 22:34 26-02-2014
OnMyDSeeAtAll



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cryzer 22:34 26-02-2014

Цитата:
В сети ответа не нашёл...
Хотя он там есть.

Всего записей: 100 | Зарегистр. 08-07-2011 | Отправлено: 01:17 27-02-2014 | Исправлено: OnMyDSeeAtAll, 01:23 27-02-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OnMyDSeeAtAll, очередной раз спасибо!)

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 21:39 27-02-2014
villa777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть скрипт по нажатию СКМ закрывающий программу, окно. Как сделать чтобы он срабатывал только после некоторого удержания СКМ(1-2секунды), а не сразу.  

Код:
~MButton::  
    WinGetClass, Win_Class, A  
    If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
        Return    
    WinClose, ahk_class %Win_Class%  
    Sleep, 200  
    Send {TAB}  
    Sleep, 50  
    Send {ENTER}  

Всего записей: 2773 | Зарегистр. 22-06-2011 | Отправлено: 12:15 28-02-2014 | Исправлено: villa777, 12:16 28-02-2014
creature_ws



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

Всего записей: 304 | Зарегистр. 29-07-2008 | Отправлено: 13:50 28-02-2014
villa777



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
creature_ws
Для меня это тёмный лес, мне бы знающий сделал что бы работало, а изучать программирование с нуля, уже возраст не тот.

Всего записей: 2773 | Зарегистр. 22-06-2011 | Отправлено: 14:21 28-02-2014
vadim3sh



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

Код:
+^!3::menu, tray, Icon
+^!8::menu, tray, Noicon
 
MButton::
TimeButtonDown = %A_TickCount%
; Wait for it to be released
Loop
   {
   Sleep 10
   GetKeyState, MButtonState, MButton, P
   if MButtonState = U  ; Button has been released.
    
      {
          Send !^{vk56} ; Здесь любая команда на короткое нажатие
           exit
       }
   elapsed = %A_TickCount%
   elapsed -= %TimeButtonDown%
   if elapsed > 600  ; Настройка задержки
         {  
    WinGetClass, Win_Class, A  
    If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
        Return    
    WinClose, ahk_class %Win_Class%
           exit
         }
   }
      return
 

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

Всего записей: 457 | Зарегистр. 28-01-2006 | Отправлено: 05:45 01-03-2014 | Исправлено: vadim3sh, 05:56 01-03-2014
villa777



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

Всего записей: 2773 | Зарегистр. 22-06-2011 | Отправлено: 18:17 01-03-2014
Cryzer



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пожалуй, задам ещё один немаловажный вопрос, всё по той же теме. :)
Можно ли определить, что файл(папка) не просто выделен, а находится в режиме переименования?
 
Зачем нужно: при отключённой автоматической сортировке выделенный (код, определяющий выделение) файл(папку) можно перемещать, одновременно выполняя некоторые действия в скрипте. Но если во время переименования файла(папки) выделять мышкой имя, то это тоже будет воспринято как перемещение. Поэтому важно отличить переименование(при котором файл выделен) от простого выделения файла. Как можно это сделать?

Всего записей: 102 | Зарегистр. 22-09-2007 | Отправлено: 19:01 01-03-2014 | Исправлено: Cryzer, 01:21 02-03-2014
Открыть новую тему     Написать ответ в эту тему

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