Jump to content
СофтФорум - всё о компьютерах и не только
Sign in to follow this  
Форматцевт

AutoHotKey - скриптовый язык программирования

Recommended Posts

Благодарности
NatM - "Интересно. Замечательно было бы..."
Yezhishe - "А что это?"



Официальная часть
Скриптовый язык программирования AutoHotKey, далее просто AHK
Скриптовый язык это -

Скриптовый язык (англ. scripting language, в русской литературе принято название язык сценариев) — язык программирования, разработанный для записи «сценариев», последовательностей операций, которые пользователь может выполнять на компьютере. Простые скриптовые языки раньше часто называли языками пакетной обработки (англ. batch languages или job control languages). Сценарии обычно интерпретируются, а не компилируются (хотя всё чаще применяют компиляцию каждый раз перед запуском).


AHK это -

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

AutoHotkey является ответвлением проекта AutoIt, когда её автор предложил интегрировать поддержку горячих клавиш в AutoIt v2, но не нашёл понимания. Так автор решил разработать собственную программу, основанную на синтаксисе AutoIt v2 и использующую некоторые возможности AutoIt v3.


Все это можно прочитать - AutoHotkey — Википедия



Не официальная часть
Я наткнулся на AHK случайно, мне надо было менять направление аудио-выхода Колонки - Наушники и было три варианта:
1. Купить "железку"
2. Найти утилиту.
3. Написать самому.

1. Лень, да и зачем, но это IMHO
2. Увы, таких было много, но 99% работали с глюками.
3. Я случайно наткнулся на скрипт и соответственно на AHK, т.к. скрипт был написан на нём, но он работал косо и я стал копать и после 2-3 дней написал это:
;-----Инициализация;Скрипт не выгружается до явного определения#Persistent;Запрет повторного запуска#SingleInstance  IgnorevExitCode :=  1OnExit, lToggleSound_Endif A_IsCompiled    {    IfNotExist, ToggleSoundDev        {          FileCreateDir, ToggleSoundDev ; Создаём папку для ресурсов          FileSetAttrib, +H+A+R, ToggleSoundDev ; Делаем её архивной, только для чтения и скрытой        }    FileInstall, ToggleSoundDev\sp32.ico, ToggleSoundDev\sp32.ico, 0 ; не перезаписывать    FileInstall, ToggleSoundDev\hp32.ico, ToggleSoundDev\hp32.ico, 0 ; не перезаписывать    FileInstall, ToggleSoundDev\sp48.ico, ToggleSoundDev\sp48.ico, 0 ; не перезаписывать    FileInstall, ToggleSoundDev\hp48.ico, ToggleSoundDev\hp48.ico, 0 ; не перезаписывать    FileInstall, ToggleSoundDev\sp64.ico, ToggleSoundDev\sp64.ico, 0 ; не перезаписывать    FileInstall, ToggleSoundDev\hp64.ico, ToggleSoundDev\hp64.ico, 0 ; не перезаписывать        }  cDevIcoSize := 48Gosub lToggleSoundGosub lMyGuiReturnlMyGui:  vTitleWin   :=  "Переключение звука: Динамики/Наушники"  vCountChar  := StrLen(vTitleWin)  vSizeFont   :=  12  vSizeWinW   :=  315 ;ширина размер по X  vSizeWinH   :=  100 ;высота размер по Y  vTxtX       :=  vSizeWinW//2 - vCountChar*2.6 + cDevIcoSize//3  vTxtY       :=  vSizeWinH//2 - vSizeFont*1,75 + cDevIcoSize*7  if (vSoundOutPut = "d")          vSoundOutPut := "sp" cDevIcoSize ".ico"  if (vSoundOutPut = "h")          vSoundOutPut := "hp" cDevIcoSize ".ico"  Gui, New , -maximizebox -minimizebox +AlwaysOnTop -Caption, %vTitleWin%  Gui , Color, 50C841  Gui, Font, c000000 s12 bold, Verdana  Gui, Add, Picture, Icon, %A_WorkingDir%\ToggleSoundDev\%vSoundOutPut%  Gui, Add, Text, x%vTxtX% y%vTxtY% , %isDevSet%  Gui, Show, Center NoActivate w%vSizeWinW% h%vSizeWinH%   if (vExitCode<>0)      SoundPlay *16    Else      SoundPlay *64    Sleep 2500 lToggleSound_End:GuiEscape:GuiClose: Gui, Cancel  ExitApp, vExitCodeReturn;=====Переключение звука===============lToggleSound:   isDevSetTitle:="Переключение звука"   isDevSet:="Звук на --> "   d:="КОЛОНКИ", h:="НАУШНИКИ"reDevSet:   Run, mmsys.cpl   Process, Wait, rundll32.exe, 1   If (!ErrorLevel)   {    Process, Close, rundll32.exe    isDevSet  := "Ошибка переключения звука"     vExitCode :=  1    Return   }   else   {      WinWait, % "ahk_pid" ErrorLevel      ControlSend, SysListView321, {Down}      Sleep, 50      ControlGet, isEnabled, Enabled,, Button2      Sleep, 50      If !isEnabled         ControlSend, SysListView321, {Down}      Sleep, 50      ControlClick, Button2 ; По умол&чанию      Sleep, 50      ControlClick, Button4 ; на клик по кнопке ОК      Process, Close, rundll32.exe      if (isEnabled)          {              isDevSet := isDevSet . d            vSoundOutPut := "d"          }          Else          {            isDevSet := isDevSet . h            vSoundOutPut := "h"          }      vExitCode :=  0   }Return

Всё просто и изящно "минус" мои извращения, но уж так я привык писать.




Разработчик AHK - Chris Mallett позиционировал свой продукт, как скриптовый язык не для программистов, так что он очень прост и понятен, если не лезть в дебри.


Официальный сайт AHK (язык, компилятор, документация, etc.) - AutoHotkey

Русская документация (по состоянию на 11.10.2008) в виде chm-файла - AutoHotkey.zip


Рекомендация моя и не только моя:
Программу следует установить в - C:\Program Files (x86)\AutoHotkey\
Скрипты следует размещать, например в С:\AHK\



Думаю этого достаточно и так много написал. Продолжу в постах. Edited by Форматцевт
  • Upvote 3

Share this post


Link to post
Share on other sites

Cкрипт в котором есть почти всё, ну почти :D

Файл основной - AllSystemOS.ahk

;*********************************************;***************BEGIN SCRIPT******************;*********************************************;-----Инициализация; Скрипт не выгружается#Persistent; Запрет повторного запуска#SingleInstance;=====Базовые пути=====================#Include c:\AHK\Include\#Include PathUses.ahk; Устанавливаем путь к файлам скрипта#Include C:\AHK\AllSystemOS\;=====Cменить иконку скриптаmcTray := PathAhkIcon "Os_Settings_Gear.ico"Menu, Tray, Icon, %McTray%,, 1;=====Переменные/константы для скрипта и начальная инициализация#Include VarScript.ahk;=====Справка по клавишам#Include HelpKey.ahk;================Игры#Include Games.ahk;=====Запуск основных приложений#Include AppStartUp.ahk;=====Блокируем отдельное нажатие клавиши WIN~LWin Up::~RWin Up::return;=====Замена CapsLock на ShiftCapsLock::Shiftreturn;*********************************************;****************END SCRIPT*******************;*********************************************

Файлы подключаемые директивой #Include (откроются в новом окне)

PathUses.ahk

VarScript.ahk

HelpKey.ahk

Games.ahk

AppStartUp.ahk

Ну вот, если кому что нужно, то смотрите и спрашивайте что непонятно

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

Edited by Indomito
  • Upvote 2

Share this post


Link to post
Share on other sites

Полезный, как мне кажется, скрипт

1. Отключаем CapsLock

CapsLock::return

2. CapsLock работает как Shift

CapsLock::Shiftreturn
  • Upvote 1

Share this post


Link to post
Share on other sites

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

Вот что получилось, да скрипт ещё не дописан до конца, но он вполне работоспособный.

Файл основной GamePad.ahk

;++++++++++++++++++++++++++++++++++++++++++++;-----Инициализация; Запрет повторного запуска#SingleInstance; Скрипт не выгружается#Persistent; Общие пути#Include c:\AHK\Include\#Include PathUses.ahk; Cменить иконкуmcTray := PathAhkIcon "GamePad1.ico"Menu, Tray, Icon, %McTray%,, 1;++++++++++++++++++++++++++++++++++++++++++++; Пути для GamePad.ahk#Include C:\AHK\GamePad\;---- Настройки для игры Mass Effect 1lbMassEffect:#Include MassEffect.ahkgosub mainreturn;---- Общие (стартовые) определенияmain:#Include MainJoy.ahkreturn;---- Функции обработки#Include funcJoy.ahk;---- Секция обработки кнопок джойстика#Include HotKeyJoy.ahk;---- Секция тамеров по обработке осей XYZR#Include TimerJoy.ahk/*MouseWheel:GetKeyState, JoyPOV, %JoystickNumber%JoyPOVif JoyPOV = -1  ; No angle.returnif (JoyPOV > 31500 or JoyPOV < 4500)  ; ForwardSend {WheelUp}else if JoyPOV between 13500 and 22500  ; BackSend {WheelDown}return*/

Файлы подключаемые директивой #Include (откроются в новом окне)

PathUses.ahk

MassEffect.ahk

MainJoy.ahk

funcJoy.ahk

HotKeyJoy.ahk

TimerJoy.ahk

Данный скрипт будет обновляться по мере его написания-дописания

Edited by Indomito
  • Upvote 1

Share this post


Link to post
Share on other sites

Дополняю мои посты #2 и #4 , как и все последующие.

1. Структура папок

c:\AHK\ - все скрипты и разное

c:\AHK\Icon\ - ico и png файлы

c:\AHK\Include\ - скрипты общего назначения

c:\AHK\AllSystemOS\ - скрипты из поста #2

c:\AHK\GamePad\ - скрипты из поста #4

2. Для запуска моих скриптов надо

Разместить их согласно указанной выше структуре;

Запустить main-скрипт, он указан первым и его название соответствует папке его размещения.

Запуск производится простым нажатием или же "Открыть с помощью" и выбрать AutoHotkey.exe или же AutoHotkey_L

Edited by Indomito

Share this post


Link to post
Share on other sites

Работа с буфером обмена :)

Просто возник вопрос - вот решение.

Скрипт можно помучить, дополнить и прикрутить GUI(кому интересно).

GUI(Graphical user interface) графический интерфейс пользователя.

Автор скрипта creature.ws

creature.ws[/b]"]Скрипт предоставляющий возможность оперировать 4-мя позициями «истории текстового содержимого буфера обмена».

Скрипт работоспособен и используется

; Windows Vista+; AHK-L#SingleInstance Ignore#KeyHistory 0#NoEnv#NoTrayIconOnExit, ExitSubDllCall("AddClipboardFormatListener", "Int", A_ScriptHwnd)OnMessage(WM_CLIPBOARDUPDATE := 0x031D, "ClipSave")clipHistory := []Esc & F1::Esc & F2::Esc & F3::Esc & F4::Clipboard := clipHistory[index := SubStr(A_ThisHotkey,0)]Controlgetfocus, FClassNN, ASendMessage, 0x302,,,%FClassNN%, ASendMessage, 0x8  ,,,%FClassNN%, ASendMessage, 0x7  ,,,%FClassNN%, AReturn$Esc Up::Send {Blind}{Esc}ReturnClipSave(){globalIf (clipHistory[index] = Clipboard)	ReturnIf !newIndex := clipHistory.MaxIndex()+1	newIndex := 1If (newIndex > 4)	clipHistory.Remove(1), newIndex--clipHistory.Insert(newIndex, Clipboard)Return}ExitSub:DllCall("RemoveClipboardFormatListener", "Int", A_ScriptHwnd)ExitAppReturn

P.S. Могу его модифицировать, улучшить и поправить, если это кому то нужно.

Edited by Indomito
  • Upvote 1

Share this post


Link to post
Share on other sites

Для любителей GUI можно использовать SmartGUI Creator, генератор графического интерфейса для AHK.

Download: Latest Release (For Windows XP/Vista/2000) - скачать исполняемый файл SmartGUI Creator

Source Code: Latest Release (For Windows XP/Vista/2000) - скачать исходный файл SmartGUI Creator

AutoHotkey Community - SmartGUI Creator - обсуждение продукта.

SmartGUI Creator написан на том же AHK

Скриншот

4.png

post-37016-0-74948500-1334378574_thumb.p

Share this post


Link to post
Share on other sites

Ещё немного про ...

Буфер Обмена

Clipboard, ClipboardAll, и OnClipboardChange

Clipboard

Clipboard является встроенной переменной, повторяющей содержимое клипборда Windows, если оно ограничивается текстом. В противоположность ей, ClipboardAll полностью повторяет клипборд, включая картинки и форматирование.

Каждая строка текста из Clipboard обычно заканчивается кодами carriage return и linefeed (CR+LF), которые в скрипте записываются как `r`n. Файлы (например, скопированные из окна Проводника с помощью Control-C) рассматриваются как текст: т.е. они автоматически преобразуются в их имена (с полными путями) при обращении скрипта к Clipboard.

Выделить имя каждого из нескольких файлов можно так:

Loop, parse, clipboard, `n, `r{MsgBox, 4, , File number %A_Index% is %A_LoopField%.`n`n Дальше?IfMsgBox, No, break}

Чтобы расставить имена файлов по алфавиту, воспользуйтесь командой Sort. Имена файлов из клипборда в файл сохранит команда: FileAppend, %clipboard%`r`n, C:\My File.txt. Слово #ClipboardTimeOut определит, как долго скрипт будет ожидать открытия клипборда - например, когда с клипбордом работает другое приложение.

Простые примеры:

clipboard = my text ; Полностью заменяет содержимое клипборда.clipboard = ; Очищает клипборд.clipboard = %clipboard% ; Превращает в простой текст.clipboard = %clipboard% Текст для добавления. ; Дописывает клипборд.StringReplace, clipboard, clipboard, ABC, DEF, All; Заменяет в клипборде все ABC на DEF (и преобразует клипборд в текст).

ClipWait делает скрипт надежнее:

[color=navy][b]clipboard = ; Очищаем клипборд, чтобы ClipWait могла обнаружить появление нового текста.Send ^cClipWait ; ждем, пока появится текст.MsgBox Control-C поместила в клипборд следующее:`n`n%clipboard%[/b][/color]

ClipboardAll

ClipboardAll(полное сохранение и восстановление клипборда) полностью повторяет клипборд (с картинкам и форматированием). Чаще всего переменная используется, чтобы сохранить клипборд, дабы скрипт мог временно занять его для своих дел. Когда дело будет сделано, скрипт восстановит клипборд, например так:

ClipSaved := ClipboardAll ; Сохраняет клипборд полностью в указанной переменной.; ... здесь можно временно использовать клипборд, например,; для сохранения текста Unicode с помощью Transform Unicode...Clipboard := ClipSaved ; Восстанавливает клипборд.; Заметьте - использован Clipboard (а не ClipboardAll).ClipSaved = ; Освобождает память, когда клипборд громоздок.

ClipboardAll также может быть сохранена в файл (в этом режиме FileAppend всегда перезаписывает существующий файл):

FileAppend, %ClipboardAll%, C:\Company Logo.clip ; Расширение файла не имеет значения.

Для последующего восстановления файла в клипборде (или в переменной) следуйте следующему образцу:

FileRead, Clipboard, *c C:\Company Logo.clip ; Обратите внимание на *c перед именем файла

OnClipboardChange

Метке OnClipboardChange (если такая существует) автоматически передается управление, как только какое-либо приложение (или даже сам скрипт) изменит клипборд. Эта передача происходит также при первом запуске скрипта.

Встроенная переменная A_EventInfo содержит:

  • 0, если клипборд пуст;
  • 1, если он содержит что-то, представимое как текст (включая файлы, скопированные из Проводника);
  • 2, если он не содержит ничего подобного тексту (например, только картинку).

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

#Persistentreturn ; Не обязательно (rem for Indomito)OnClipboardChange:ToolTip Тип данных в клипборде: %A_EventInfo%Sleep 1000ToolTip ; Гасит сообщениеreturn

Когда клипборд изменяется при исполнении нити за меткой OnClipboardChange, уведомление об изменении теряется. Если такое неприемлемо, в первой строке за меткой поместите Critical. Однако, эта мера также отсрочит исполнение других нитей (подобных обработке горячих клавиш) на время исполнения нити OnClipboardChange.

Если сам скрипт изменяет клипборд, нить за меткой OnClipboardChange обычно исполняется не сразу; это значит, что команды, стоящие непосредственно за командой изменившей клипборд, скорее всего будут исполнены раньше. Чтобы заставить нить исполняться немедленно, после команды на изменение клипборда можно добавить короткую задержку Sleep 20.

От меня:

Самое простое решение это запустить OnClipboardChange в таймере, т.е. в отдельном потоке:

#PersistentSetTimer, lbClipboard, 10returnlbClipboard:OnClipboardChange:sleep 50ToolTip Тип данных в клипборде: %A_EventInfo%sleep 50return

правда будет мерцание, но это уже другая проблема и решается она иначе.

Edited by Indomito
  • Upvote 1

Share this post


Link to post
Share on other sites

LogOff

Скрипт выполняет три функции

1. LogOff - Сменить пользователя и заблокировать Windows

2. Restart - Перезагрузка Windows и перезагрузка компьютера.

3. Power - Выход из Windows и выключение компьютера.

Выводит модальное окно с затемнением и ждёт ответа выбора (реакция на все действия вне окна заблокировано включая и нажатие Alt-Tab и остальных не нужных клавиш)

Скрипт дописывается- проблема с мультипликацией :D

Logo.ahk

Gui Gray:New, +LastFound +AlwaysOnTop -Caption +ToolWindow +HwndMyGuiHwndGui, Gray:DefaultGui , Color, 0WinSet, Transparent, 200Gui, Show, x0 y0 NoActivate W%A_ScreenWidth% H%A_ScreenHeight%Gui, DefaultvWinName := "Windows 7"Gui, New , +OwnDialogs -caption +AlwaysOnTop +HwndMyFocus , %vWinName%Gui, Margin , 0, 0 ; без captionGui, Add, Picture, x0 y0 w750 h563 , C:\AHK\IMG\Fon_s_knopkami.png ;C:\AHK\IMG\Fon_s_dyrkami.png;Gui, Color, EEAA99 ;  background color Example values: Silver, FFFFAA, 0xFFFFAA, DefaultGui, Show, xCenter yCenterSetTimer lbTopWinLogo,10, onHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *!Tab, TabPressedHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *LButton, LBpressedHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *XButton1, TabPressedHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *XButton2, TabPressedHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *MButton, TabPressedHotkey, IfWinExist, ahk_id %MyFocus%Hotkey, *RButton, TabPressedreturnGuiClose:GuiEscape:SetTimer lbTopWinLogo,, offExitAppLBpressed:  MouseGetPos,,,OutputVarWin  if (MyFocus = OutputVarWin)  ClickreturnTabPressed:returnlbTopWinLogo:if (!WinActive(vWinName)) WinActivate, %vWinName%MouseGetPos, OutputVarX, OutputVarY, OutputVarWin  if (MyFocus = OutputVarWin)ToolTip X= %OutputVarX% `n Y= %OutputVarY%  return;=====Временная блокировка до окончания написания скрипта~LWin Up::~RWin Up::return
Edited by Indomito
  • Upvote 1

Share this post


Link to post
Share on other sites

Эм-м-м... Я, конечно, безмерно извиняюсь, но... Каковы принципиальные отличия от стандартной кнопки "Пуск"?

Я не издеваюсь - мне просто интересно...

Share this post


Link to post
Share on other sites

Здравствуйте. У меня имеются колонки на компе 5.1, часто слушаю музон в наушниках. При постоянном переключении с колонок на наушники и обратно приходится в настройках драйвера звуковухи переключать режим Speakers 5.1 на Headphones и обратно соответственно. Вот хотел бы узнать, можно ли при помощи той софтины запилить скрипт, чтобы одним нажатием это переключение делать можно было?

Спасибо.

Share this post


Link to post
Share on other sites

Я почему-то почти уверен в том, что можно даже настроить скрипт(ы) так, чтобы он(и) срабатывал(и) на реакцию звукового драйвера на (пере)подключение разъёмов...

Share this post


Link to post
Share on other sites

Эм-м-м... Я, конечно, безмерно извиняюсь, но... Каковы принципиальные отличия от стандартной кнопки "Пуск"?

Я не издеваюсь - мне просто интересно...

ни какой, мне просто так нравится :D

P.S. У меня кнопка ПУСК отсутствует за ненадобностью ;) да, да - я извращенец ))))

Edited by Indomito

Share this post


Link to post
Share on other sites

@Shadow TH, можно, именно я это и сделал, смотри мой первый пост #1.

Правда есть отличия в задаче, но не принципиальные.

Share this post


Link to post
Share on other sites

Может кому то пригодится.

Скрипт показывает список элементов (при наведении) управления активного окна.

Для разработки скриптов и программ, можно добавить сохранение в файл по ЛКМ и выход из скрипта по ПКМ.

;Показывает в реальном времени список элементов управления активного окна:#PersistentSetTimer, WatchActiveWindow, 200returnWatchActiveWindow:WinGet, ControlList, ControlList, AToolTip, %ControlList%return

P.S. Для браузеров не подходит.

Edited by Indomito

Share this post


Link to post
Share on other sites

Я вообщем то не собирался писать этот скрипт, но просто понадобилось сформировать набор списка файлов с прослушиванием, ну и началось :D

В скрипте есть всего понемногу:

- файловые операции;

- GUI (совсем чуть-чуть);

- циклы и работа с массивами;

- ну и т.д. и т.п.

Писал 10-15 минут, так что не очень заботился об алгоритмизации - извиняйте. :tease:

#include C:\AHK\Include\PathUses.ahkMenu, Tray, Icon, Shell32.dll, 168vChoice := ;vTChoice := ;arWavWin := [""]i := 0Loop, %A_WinDir%\Media\*.*{ if ((A_LoopFileExt = "wav") or (A_LoopFileExt = "mid")){ arWavWin[++i] :=  A_LoopFileName vTChoice := vTChoice "|" arWavWin[i]}}arWavWin[i+1] := 0vChoice := SubStr(vTChoice, 2)Gui, New,-maximizebox -minimizebox,Результаты поискаGui, font, s11Gui, Add, ListBox, x18 y70 w264 h350 , %vChoice%Gui, font, s10Gui, Add, Button, x2 y440 w110 h30 Default gOk, ПродолжитьGui, Add, Button, x186 y440 w110 h30 gCancel, ВыйтиGui, font, s13Gui, Add, Text, Center x12 y20 w254 h40 , Поиск закончнен`, надено `n %i% файловGui, Show, x408 y118 h485 w300ReturnGuiEscape:GuiClose:Cancel:Gui, CancelExitAppOk:Gui, Cancelclipboard = ;vTmp := ;i := 1while (arWavWin[i])  { vWav := arWavWin[i] SoundPlay %A_WinDir%\Media\%vWav% ; , wait не будем ждать т.к. файл может быть длинный. sleep 2000 ; ограничиваемся 2-мя секундами.	 msgbox % 3+32	   ,% "Звуки Windows"	   ,% "Звук №" cEscSps i cEscSps cEscSps arWavWin[i] cEsc2LF "Сохранить в буфере обмена?"	   ,% 5 IfMsgBox Yes	 vTmp := vTmp vWav cEscCRLF	else IfMsgBox Cancel		  break	  else IfMsgBox No		   i := i	   else		 i--		   i++ sleep 500 ; чуть подождем (0.5 сек) пока закончится поток.}clipboard = %vTmp%if (clipboard){  msgbox % 0+32	 ,% "Содержимое СlipBoard"	 ,%  clipboard}ExitApp

Ну и подключаемый файл PathUses.ahk - ну это как всегда ;)

Share this post


Link to post
Share on other sites

Решил переделать то что написал выше и вот что вышло - не судите строго.

Вот EXEшник - FndWav.zip

Вот исходник - FndWav.ahk


1.png 7.png 6.png 5.png

Нашёл баг - надо всё же использовать ключ, т.е. FndWav.exe /m f:\torrent\book\Роберт Шекли - Cборник рассказов а то получается куча параметров из-за пробела в имени пути... случайно обнаружил ;)

Хотя можно проверять на m или w или 3 - но получается сложный алгоритм и мало ли что ещё мне задумается искать или делать установки. :D

P.S. Админ! Пропадают LF|CR при редактировании - 5 раз перегружал страницу... не порядок однако ;)

post-37016-0-22238100-1335316194_thumb.p

post-37016-0-03358400-1335404043_thumb.p

post-37016-0-84921100-1335404500_thumb.p

post-37016-0-96606600-1335404754_thumb.p

Edited by Indomito

Share this post


Link to post
Share on other sites

Давно я не писал (ДА ДА вижу предупреждения, но тема моя же) и так о компиляции скриптоФ и от трее

Это фрагмент файла AllSystemOS.ahk а точнее весь немного переделанный и допиленный.

; Скрипт не выгружается#Persistent; Запрет повторного запуска#SingleInstance;----------------------------------- Вот новая часть (переделка); -----------------ЧАСТЬ №1; Ресурсы скриптаFileCreateDir, %A_WorkingDir%AllSystemOS_RES ; Создаём папку для ресурсовFileSetAttrib, +H, %A_WorkingDir%AllSystemOS_RES ; Делаем её скрытойFileInstall, AllSystemOS_RES\windows7.jpg, AllSystemOS_RES\windows7.jpg, 1 ; Картинка для рестартаFileInstall, AllSystemOS_RES\Os_Settings_Gear.ico, AllSystemOS_RES\Os_Settings_Gear.ico, 1 ; иконка в трее;--------------------------------------------------------------------;=====Базовые пути=====================#Include c:\AHK\Include\#Include PathUses.ahk; Устанавливаем путь к файлам скрипта#Include C:\AHK\AllSystemOS\; -----------------ЧАСТЬ №2; Работа с ресурсами и иконкойsleep 5000 ; задержка для коррекции и синхронизации.;=====Cменить иконку скрипта  mcTray := "AllSystemOS_RES\Os_Settings_Gear.ico"  Menu, tray, NoStandard				   ; меню в трее будет не стандартным - своим  Menu, Tray, Icon, %McTray%			 ; Устанавливаем иконку  Menu, tray, add, Справка, HelpKey1 ; добавляем пункт меню по ПКМ  Menu, tray, add, Выход, lExitProc	 ; добавляем пункт меню по ПКМ  ; Задаём свою выноску "балон"  Menu, tray, tip, `n Обработка клавиш для: `n  - приложений `n  - игр `n  - и т.д. `n `n  Menu, tray, default, Справка ; Этот пункт меню по умолчанию двойной щелчёк ЛКМ по иконке в трее для его вызова  Menu, Tray, Click, 1 ; Переназначаем двойной на одиночный ЛКМ;-------------------------------------------------------------;=====Переменные/константы для скрипта и начальная инициализация#Include VarScript.ahk;=====Справка по клавишам#Include HelpKey.ahk;================Игры#Include Games.ahk;=====Запуск основных приложений#Include AppStartUp.ahk;=====Блокируем отдельное нажатие клавиши WIN;~LWin Up::;~RWin Up::; При компиляции;=====Замена CapsLock на ShiftCapsLock::ShiftreturnlExitProc:ExitApp;*********************************************;****************END SCRIPT*******************;*********************************************

Далее запускаем компилятор и радуемся - иконки и т.д. буду там где надо.

Вот что я хотел написать - вроде всё.

Edited by Indomito
  • Upvote 1

Share this post


Link to post
Share on other sites

@Bestiya, И так по шагам.

1. Скачать и установить AutoHotkey_L (расширенная редакция языка)

2. Открытть любой текстовый редактор - блокнот подойдёт для начала. (Рекомендую SciTE4AutoHotkey или Notepad++)

3. Описываю задачу:

- когда нажимается клавиша A то печатается B и наоборот.

- скрипт должен быть резидентным, т.е. работать постоянно.

4. Набираем сл. текст

; Скрипт не выгружается#Persistent; Активизация хука клавиатуры, т.е. внутри директивы #UseHook клавиша может вызывать самою себя;#UseHook, Ona::breturnb::areturn; Деактивизация хука клавиатуры;#UseHook, Off

Примечание

Когда ; расположена в начале строки это означает комментарий или же данная команда не работает, в данном случае не будут работать

хуки клавиатуры #UseHook, On и #UseHook, Off - они необязательны, но если не сработает замена, например в игре, то надо убрать ;

5. Сохраняем текстовый файл sub_AB.ahk где угодно, т.е. где удобнее.

6. Запускаем его двойным нажатие на ЛКМ

7. Тестируем и радуемся :)

Вот текст скрипта, у него двойное расширение, т.к. расширение AHK не допустимо, надо просто переименовать, т.е. убрать .TXT

sub_AB.ahk.txt

sub_AB.ahk.txt

Edited by Indomito

Share this post


Link to post
Share on other sites

В дополнение к посту #18 скрипт для безусловной компиляции с запуском.

;***********************************************;Компиляция для AllSystemOS.ahk,; не стал делать параметризованную,; т.к. проще внести поправки где необходимо.;***********************************************;Закрываем редактор, что бы не забыть сохранить изменения в исходнике перед компиляциейvWin := "Notepad++" ; Окно должно содержать хотя бы этот текст. Case Sensitive!!!!fNP := falseSetTitleMatchMode, 2IfWinExist, %vWin% {   WinClose   fNP := true }; Завершаем процесс ASOS.exeProcess, Close, ASOS.exesleep 3000 ; Чуть подождём = 3 сек; Параметры для компиляции.;--------------------------------;Два последних ключа;--> 1-й;/bin библиотека - Libraries, but not all, depending on the encoding of the source!!!;AutoHotkeySC.bin;ANSI 32-bit.bin;Unicode 32-bit.bin;Unicode 64-bit.bin;--> 2-й;/mpress  ;сжатие EXE ON = 1;сжатие EXE OFF = 0;--------------------------------vTarget := "Ahk2Exe.exe /in C:\AHK\AllSystemOS\AllSystemOS.ahk /out C:\ASOS.exe /icon C:\AHK\AllSystemOS\ASOS_RES\Os_Settings_Gear.ico /bin ""Unicode 32-bit.bin"" /mpress 1"; Рабочая папка компилятораvWorkingDir := "C:\Program Files (x86)\AutoHotkey\Compiler"; Запуск компилятораRun, %vTarget% , %vWorkingDir%sleep 3000 ; Чуть подождём = 3 сек; Имя запускаемого процессаvTarget := "ASOS.exe"; Его рабочая папкаvWorkingDir := "C:\"; Запускаем ASOS.exeRun, %vTarget% , %vWorkingDir%;Запускаем редактор Notepad++ , если он был запущен ранееif (fNP){   vTarget := "C:\Program Files (x86)\Notepad++\notepad++.exe"   vWorkingDir := "C:\Users\SASA\AppData\Local\Temp\nppLocalization"   Run, %vTarget% , %vWorkingDir%   sleep 3000 ; Чуть подождём = 3 сек  }exit ; И выходим
Edited by Indomito

Share this post


Link to post
Share on other sites

Bestiya и так проблемы со скриптом.

Решение №1. Использовать вместо букв скан-коды. Может быть у тебя клавиатура от ноута или мультимедийная.

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

#Persistent  OnExit, Exit  hHookKeybd := DllCall("SetWindowsHookEx"  , Int, WH_KEYBOARD_LL := 13  , UInt, RegisterCallback("LowLevelKeyboardProc", "Fast")  , UInt, DllCall("GetModuleHandle", UInt, 0)  , UInt, 0)  ReturnExit:  DllCall("UnhookWindowsHookEx", UInt, hHookKeybd)  ExitAppLowLevelKeyboardProc(nCode, wParam, lParam){  Critical  SetFormat, Integer, H  ToolTip, % wParam . "| vkCode: " . NumGet(lParam+0, 0) . " scCode: " . NumGet(lParam+0, 4)  . " Extended: " . NumGet(lParam+0, 8) & 1 . " Time: " . NumGet(lParam+0, 12)  Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam)}

Запускаешь её, нажимаешь на кнопку и там где курсор мышки появится - 3.png тебе нужно то что начинается с vkCode записываешь его и далее a и b заменяешь на vk41 и vk42

Получаем такой скрипт

; Скрипт не выгружается#Persistent; Активизация хука клавиатуры, т.е. внутри директивы #UseHook клавиша может вызывать самою себя;#UseHook, Onvk41::vk42returnvk42::vk41return; Деактивизация хука клавиатуры;#UseHook, Off

Да, после этого будет поддерживаться раскладка/переключение клавиатуры RU <-> EN (Для букв a и b)

Решение №2. Убери комментарии с #UseHook, On и #UseHook, Off

Решение №3. Ты поставила не AHK_L, а AHK BASIC (в нём много что не работает и много ограничений + он давно не обновлялся). Запусти скрипт C:\Program Files (x86)\AutoHotkey\Update.ahk и посмотри версию или же просто сделай скриншот.

P.S. Работать должно на 100% это очень простая программа переназначения.

post-37016-0-26519000-1357520296_thumb.p

Edited by Indomito

Share this post


Link to post
Share on other sites

Для тех кто использует Mozilla Thunderbird как почтовую программу по умолчанию в загрузке или запускает в ручную.

Исходный код, его цель спрятать Mozilla Thunderbird просто она иногда этого делать не хочет

Sleep, 500ToolTiploop 10 {SetTitleMatchMode, 2if WinExist("Thunderbird"){ ToolTip fnWinTray() WinMinimize WinClose ; Убрать если нет дополнения Sleep, 100 ToolTip}}returnfnWinTray(){Send, {F9 Down}KeyWait, % A_ThisHotkeySend, {F9 Up}return}

В коде есть вызов встроенной функции для закрытия окна WinClose, если у вас нет дополнения обрабатывающего Вместо Закрыть окно -> Минимизировать/Убрать в трей, то данную функцию следует удалить.

Кому не лень компилировать, то используйте библиотеки Unicode 32-bit.bin или Unicode 64-bit.bin

Для тех кому лень компилировать, я прикладываю в архивы с EXE- файлми.

1. С WinClose - TbHideTray1.rar

2. Без WinClose - TbHideTray2.rar

Сразу предупреждаю. Программа, т.е. TbHideTray.exe упакована mpress.exe для уменьшения размера, так что программы типа ResHacker.exe не смогут работать с ресурсами, сначала требуется её распаковать.

TbHideTray1.rar

TbHideTray2.rar

Edited by Indomito

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

@Леха Н, можно и делали на AHK... загляни на "Серый Форум". Просто не хочется копи-пасте заниматься, я здесь публикую что сам написал и на 99,9% работает.

 


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

Share this post


Link to post
Share on other sites

Я тут решил поиграть в Saints Row: The Third (THQ), ну и началось - это не нравиться это не так нажимается и так далее...

Открыл я Notepad++ и решил написать небольшой скриптик на AHK, но как всегда это закончилось, ну понятно чем закончилось  :)

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

Даю только текст, а кому нужен сам файл пишите тут или в ЛС.

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

 

Не рекомендую открывать, если не нужно  :bigsmile:

;The script for the game Saints Row: The Third (THQ)

;Initialization script

;The script will not be discharged, he resident

#Persistent

; Prohibition re-run the script

#SingleInstance

Gosub lGui

sleep 5000 ; Delay correction and synchronization.

; Primary installation, initialization

WindowsDir := "C:\Windows\"

vGameKey := true ; On/Off gaming keys (start-up ON)

vDebugTHQ := false ;(true/false) ;If debugging is enabled, then output your data to control the correct operation (scope of - all script).

gosub lVarGameTHQ

gosub startGuiClose

return

lGui:

vTxt := "Preparations are underway the start scripts, wait ..."

Gui, start:New , -resize -maximizebox -minimizebox +caption -Border +AlwaysOnTop +Owner

Gui, start:font, s12

Gui, start:Add, Text, x40 y40 w300 h280 +Center, %vTxt%

Gui, start:Show, x400 y100 h100 w400

Return

startGuiClose:

Gui, Destroy

Return

lEndGameKeys:

gosub lExitProc

return

GameKeyOnOff:

if (!vGameKey)

{

msgbox 1,Switching game keys, Game keys = OFF `n `n Disable the gaming keys for THQ? ,10

IfMsgBox, Cancel

return

else

vGameKey := true

}

else

{

msgbox 1,Switching Game Keys, Game keys = ON `n `n Enable gaming keys for THQ? ,10

IfMsgBox, Cancel

return

else

vGameKey := false

}

return

LWin & F1::

vGameKey != vGameKey

return

LWin & F12::

gosub GameKeyOnOff

return

LWin & Tab::

;Exit procedure does not provide, ie, not been written, but you can close it by pressing Win+Tab or the tray.

ExitApp

;-----BEGIN--Для Saints Row: The Third-----

#If vGameKey && WinActive("Saints Row")

SetTitleMatchMode, 2

;The script is paired directives - #UseHook, On|Off this means that the ON/OFF hook the keyboard and key within directives may call itself.

;Correction reloading weapons, ie "/" key (scan code of the key, it is the 8th, it's not a mouse problem or a system)

#UseHook, On

sc35::

sleep, 5

Send, {sc35 Down}

KeyWait, % A_ThisHotkey

Send, {sc35 Up}

return

#UseHook, Off

;All the functions of this script are included after clicking on this button - previously they Blocked list.

LShift::

gosub lLShift

return

;These keys access the game menu and we disable functions the main part the script.

#UseHook, On

Enter::

if (vRSh)

{

gosub lMinGear

Sleep %td02_Sleep%

}

Send, {Enter Down}

KeyWait, % A_ThisHotkey

Send, {Enter Up}

#UseHook, Off

~Esc::

~Tab::

fSoundPlay := true

if (vRSh)

{

gosub lMainTHQoff2

vRShX :=0

vRSh :=0

}

return

;Subroutine-timer for checking of the active window game.

lTimerTest:

if (vDebugTHQ)

ToolTip vLSh := %vLSh% `n vRSh := %vRSh%

if !(vGameKey && WinActive("Saints Row"))

{

vLSh := 1

gosub lLShift

SetTimer lTimerTest, off

}

return

lChkArrDef:

cMaxGear := 0

while (arGear[cMaxGear+1])

cMaxGear++

i := 0

while (arGearIn[i+1])

i++

if (i<>cMaxGear)

{

msgbox, % vMsgOptionsEr

,Saints Row: The Third

,Error - The dimension of the array arGear[] arGearIn[] not identical `n`n arGear[] = %cMaxGear%`n arGearIn[] = %i%

,50

ExitApp

}

return

lVarSoundTHQ:

;I myself picked up the sounds, recorded and edited himself.

;Directory C:\Windows\Media\THQ\ - does not exist

cSoundPath := WindowsDir "Media\THQ\"

arSoundTHQ := [[cSoundPath,"start.wav",50]

,[cSoundPath,"stop.wav",50]

,[cSoundPath,"SpeedUp.wav",50]

,[cSoundPath,"SpeedDn.wav",50]

,[cSoundPath,"Signaling.wav",50]

,[cSoundPath,"Toot.wav",50]

,[cSoundPath,"SpeedZero.wav",50]

,[cSoundPath,"AutoGearBox.wav",50]

,[cSoundPath,"ArmGearBox.wav",50]

,[cSoundPath,"OnKeyTHQ.wav",50]

,[cSoundPath,"OffKeyTHQ.wav",50]

,[cSoundPath,"CorrectorYawON.wav",50]

,[cSoundPath,"CorrectorYawOFF.wav",50]

,[cSoundPath,"NONE",0]

,[false,false,false]]

iSoundStart := 1

iSoundStop := 2

iSoundSpeedUp := 3

iSoundSpeedDn := 4

iSoundSignaling := 5

iSoundToot := 6

iSoundSpeedZero := 7

iSoundAutoGearBox := 8

iSoundArmGearBox := 9

iSoundOnKeyTHQ := 10

iSoundOffKeyTHQ := 11

iSoundCorrectorYawON := 12

iSoundCorrectorYawOFF := 13

iNoSound := 14

return

lVarGameTHQ:

gosub lVarSoundTHQ

vMsgOptionsEr :=0+4096+16 ;only an OK button + System Modal (always on top) + Icon Hand (stop/error)

vMsgOptionsOK :=0+4096+48 ;only an OK button + System Modal (always on top) + Icon Exclamation

vMsgOptionsDg :=4+4096+32 ;OK/Cancel button + System Modal (always on top) + Icon Question

fnPlaySoundTHQ(iNoSound)

if (vDebugTHQ)

{

msgbox, % vMsgOptionsDg

,Saints Row: The Third

,Turn off debugging / diagnostic messages? `n `n

,10

IfMsgBox, OK

vDebugTHQ := false

}

fSoundPlay := false

vLSh := 0

vRSh := 0

vRShX := 0

fScepl := true

fSpdOn := true

fUDLR := true

fMainTHQ := false

fGearBox := true

fCarTurn := true

;An array of speeds, the higher the value the longer the key is held "Up", "Down", "Left" and "Right".

;The last element of the array is the value of the timer that you want to calculate the constants of the script.

arGear := [3, 12, 24, 36, 44, 56, 64, 78, 94, 118, 142, 166, 182, 230, 254, 120*5]

;An array increment rate and is used to shift the algorithm is simple - arGear[iGear]/arGearIn[iGear]?12

arGearIn := [1, 1, 2, 3, 3, 4, 5, 6, 7, 9, 11, 13, 14, 18, 19, 45]

gosub lChkArrDef ;The variable/constant cMaxGear defined and tested in routine lChkArrDef.

cTimerMin := 100 ;The minimum value of the timer in the arGear[cMaxGear]=500

cTimerSpd := Round(arGear[cMaxGear]/5) ;Optimum value for cTimerSpd between 105 and 125 milliseconds (with a default period of 250).

;Multiplier-factor to calculate the remaining constants, do not use integer division "//", and use the standard "/" !!!

cTimerFactor := cTimerMin/cTimerSpd

;Definition/delay based on constants cTimerSpd and cTimerFactor

tt01_Sleep := Round(cTimerSpd*20) ; (0.83|120) = 100 (99,6)

td20_Sleep := Round(tt01_Sleep/20) ; (0.83|120) = 5

td10_Sleep := Round(tt01_Sleep/10) ; (0.83|120) = 10

td05_Sleep := Round(tt01_Sleep/5) ; (0.83|120) = 25

td02_Sleep := Round(tt01_Sleep/2) ; (0.83|120) = 50

tm02_Sleep := tt01_Sleep*2 ; (0.83|120) = 200

tm03_Sleep := tt01_Sleep*3 ; (0.83|120) = 300

tm04_Sleep := tt01_Sleep*4 ; (0.83|120) = 400

tm05_Sleep := tt01_Sleep*5 ; (0.83|120) = 500

cTimerBrk := Round(cTimerSpd*25*cTimerFactor)

iGear := 1

iGearTrc := iGear

cSpdDif := 1

cBrkDif := 5

cLRDif := 1.32

;Time delays when you press and release the keys they need for precision maneuvering speed and all the chiding of the car, helicopter, etc.

;Delays dependent on timer, the higher the value, the longer the delay, but not a significant number.

cSleepSpd := Round(cTimerFactor*24.2) ;cSleepSpd := 20 (0.83|120) The delay for the key "Up" - gas

cSleepBrk := Round(cTimerFactor*6.1) ;cSleepBrk := 5 (0.83|120) The delay for the key "Down" - the brake and reverse gear

cSleepLfRg := Round(cTimerFactor*12.1) ;cSleepLfRg := 10 (0.83|120) The delay for the keys "Left" and "Right" - turns

cInTurn := -1

cTurnSelf := 0

cOutTurn := 1

return

fnPlaySoundTHQ(iSound)

{

global arSoundTHQ, vMsgOptionsEr

vSoundPlayTHQ := arSoundTHQ[iSound,1] arSoundTHQ[iSound,2]

vSoundSleepTHQ := arSoundTHQ[iSound,3]

if (arSoundTHQ[iSound,1])

{

SoundPlay, %vSoundPlayTHQ%

Sleep, %vSoundSleepTHQ%

}

else

{

if iSound is not number

iSound:="VOID"

msgbox, % vMsgOptionsEr

,Saints Row: The Third

,Wrong sound file ! `n`n Invalid index for the array 'arSoundTHQ' `n`n Index of is equal = "%iSound%" `n`n Check path`, file name and index function call 'fnPlaySoundTHQ'

,50

}

return

}

;The key for blocking accidental activation functions RShift

lLShift:

gosub lSetTimerOff

SetTimer lTimerTest, off

if (vLSh=0)

{

Hotkey, RShift, lRShift, On

gosub lVarGameTHQ

vLSh := 1

fSoundPlay := true

fnPlaySoundTHQ(iSoundOnKeyTHQ)

}

else

{

Hotkey, RShift, lRShift, Off

gosub lVarGameTHQ

fSoundPlay := true

gosub lMainTHQoff2

vLSh := 0

fnPlaySoundTHQ(iSoundOffKeyTHQ)

}

Sleep %td05_Sleep%

SetTimer lTimerTest, 50

return

;The main part - function on or off the script

lRShift:

if (vRSh=0)

{

gosub lMainTHQon1

gosub lMainTHQon2

}

else

{

gosub lMainTHQoff1

gosub lMainTHQoff2

}

return

lSetTimerOn:

SetTimer lMoveUp, %cTimerSpd%

SetTimer lMoveBrk, %cTimerBrk%

return

lMainTHQon1:

vRSh :=1

vRShX :=1

fSpdOn := true

fUDLR := true

gosub lGearSpdBrk

return

lMainTHQon2:

;Hotkey - creates, modifies, enables, or disables a hotkey while the script is running.

;Here is a general rule records - Hotkey, KeyName [, Label, Options]

;Hotkey command syntax rules are described in the programming language AutoHotkey.

Hotkey, WheelUp, lGearUp, On

Hotkey, WheelDown, lGearDn, On

Hotkey, PgUp, lMaxGear, On

Hotkey, PgDn, lMinGear, On

Hotkey, Up, lUp, On

Hotkey, Down, lDown, On

Hotkey, Left, lLeft, On

Hotkey, Right, lRight, On

Hotkey, End, lToggleGearBox, On

Hotkey, RShift & XButton2, lToggleGearBox, On

Hotkey, Home, lCorrectorYaw, On

Hotkey, RShift & XButton1, lCorrectorYaw, On

Hotkey, RCtrl, lSwitchEngine, On

fnPlaySoundTHQ(iSoundStart)

fSoundPlay := false

gosub lSetTimerOn

return

lSetTimerOff:

SetTimer lMoveUp, off

SetTimer lMoveBrk, off

return

lMainTHQoff1:

vRSh := 0

vRShX := 1

fScepl := true

fSpdOn := true

fUDLR := true

gosub lGearSpdBrk

return

lMainTHQoff2:

gosub lSetTimerOff

;When you turn off enough to indicate Cycled key, but clearer and less chance go wrong.

Hotkey, WheelUp, lGearUp, Off

Hotkey, WheelDown, lGearDn, Off

Hotkey, PgUp, lMaxGear, Off

Hotkey, PgDn, lMinGear, Off

Hotkey, Up, lUp, Off

Hotkey, Down, lDown, Off

Hotkey, Left, lLeft, Off

Hotkey, Right, lRight, Off

Hotkey, End, lToggleGearBox, Off

Hotkey, RShift & XButton2, lToggleGearBox, Off

Hotkey, Home, lCorrectorYaw, Off

Hotkey, RShift & XButton1, lCorrectorYaw, Off

Hotkey, RCtrl, lSwitchEngine, Off

if (!fSoundPlay)

{

fnPlaySoundTHQ(iSoundStop)

fSoundPlay := true

}

return

lGearTrc:

if (vRShX=0)

return

if (iGear<>iGearTrc)

gosub lSetTimerOff

else

return

if (iGear=1)

fnPlaySoundTHQ(iSoundSpeedZero)

else

if (iGear>iGearTrc)

fnPlaySoundTHQ(iSoundSpeedUp)

else

fnPlaySoundTHQ(iSoundSpeedDn)

iGearTrc:=iGear

gosub lSetTimerOn

return

;Main subroutine to dynamically calculate the speed, braking and turning angle corrector.

lGearSpdBrk:

vGearSpd := Round((arGear[iGear]+arGearIn[iGear]*iGear)*cTimerFactor)

vGearBrk := Round((arGear[iGear]/iGear+iGear)*cTimerFactor)

vGearLRU := Round(vGearBrk*cLRDif)

vGearLRD := Round(vGearSpd/(vGearBrk*cLRDif))

if (vGearSpd=arGear[1])

fSpdOn:=false

else

fSpdOn:=true

if (iGear=cMaxGear)

SetTimer lMoveBrk, off

else

SetTimer lMoveBrk, %cTimerBrk%

if (iGear=1)

SetTimer lMoveUp, off

else

SetTimer lMoveUp, %cTimerSpd%

return

;Enable/disable the car turn corrections depending on its speed.

lCorrectorYaw:

if (fCarTurn)

{

fCarTurn:=false

fnPlaySoundTHQ(iSoundCorrectorYawOFF)

}

else

{

fCarTurn:=true

fnPlaySoundTHQ(iSoundCorrectorYawON)

}

return

;Switch the automatic/manual gearbox (transmission).

lToggleGearBox:

if (fGearBox)

{

fGearBox:=false

fnPlaySoundTHQ(iSoundArmGearBox)

}

else

{

fGearBox:=true

fnPlaySoundTHQ(iSoundAutoGearBox)

}

return

;----Beginning processing section acceleration and deceleration

lGearUp:

iGear++

if (iGear>cMaxGear)

iGear:=cMaxGear

gosub lGearSpdBrk

gosub lMoveUp

return

lGearDn:

iGear--

if (iGear<1)

iGear:=1

gosub lGearSpdBrk

gosub lMoveBrk

return

lGearAddUp:

if (!fGearBox)

return

vGearSpd += arGearIn[iGear]

if (vGearSpd>arGear[iGear+1])

{

iGear++

gosub lGearSpdBrk

}

if (iGear>cMaxGear)

{

iGear:=cMaxGear

gosub lGearSpdBrk

}

gosub lMoveUp

return

lGearAddDn:

if (!fGearBox)

return

vGearSpd -= arGearIn[iGear]

if (vGearSpd<arGear[iGear-1])

{

iGear--

gosub lGearSpdBrk

}

if ((iGear<1) or (vGearSpd<arGear[1]))

{

iGear:=1

gosub lGearSpdBrk

}

gosub lMoveBrk

return

#UseHook, On

lUp:

fUDLR:=false

Send, {UP Down}

u:=0

uu:=Round(arGear[iGear]/(iGear*cTimerFactor) + arGearIn[iGear]*cTimerFactor)

while (GetKeyState("UP", "P"))

{

if (GetKeyState("XButton2", "P"))

{

Send, {XButton2 Up}

gosub lMaxGear

Break

}

u++

if (u>uu)

{

u:=0

loop %cSpdDif%

gosub lGearAddUp

uu:=Round(arGear[iGear]/(iGear*cTimerFactor) + arGearIn[iGear]*cTimerFactor)

}

sleep %cSleepSpd%

}

Send, {UP UP}

fUDLR:=true

return

lDown:

fUDLR:=false

gosub lGearSpdBrk

Send, {Down Down}

d:=0

dd:=Round(arGear[iGear]/(iGear*cTimerFactor))

while (GetKeyState("Down", "P"))

{

if (GetKeyState("XButton2", "P"))

{

Send, {XButton2 Up}

gosub lMinGear

Break

}

d++

if (d>dd)

{

d:=0

loop %cBrkDif%

gosub lGearAddDn

dd:=Round(arGear[iGear]/(iGear*cTimerFactor))

}

sleep %cSleepBrk%

}

Send, {Down Up}

fUDLR:=true

return

;-----End sections of acceleration and deceleration processing

;-----Beginning of turns processing section

lLeft:

fUDLR:=false

gosub lGearSpdBrk

fnTurnLR(cInTurn)

Send, {Left Down}

while (GetKeyState("Left", "P"))

fnTurnLR(cTurnSelf)

Send, {Left Up}

fnTurnLR(cOutTurn)

fUDLR:=true

return

lRight:

fUDLR:=false

gosub lGearSpdBrk

fnTurnLR(cInTurn)

Send, {Right Down}

while (GetKeyState("Right", "P"))

fnTurnLR(cTurnSelf)

Send, {Right Up}

fnTurnLR(cOutTurn)

fUDLR:=true

return

;The corrector function of turns

fnTurnLR(vStage)

{

global cTurnSelf,fCarTurn, vGearLRU, vGearLRD

if (!fCarTurn)

return

if (vStage!=cTurnSelf)

{

Send, {UP Down}

sleep %vGearLRD%

Send, {UP Up}

}

else

{

Send, {UP Down}

sleep %vGearLRU%

Send, {UP Up}

}

return

}

;-----End processing section of turns

lMaxGear:

iGear:=cMaxGear

gosub lGearUp

gosub lMoveUp

return

lMinGear:

iGear:=1

gosub lGearDn

gosub lMoveBrk

return

;Switch the engine to idle speed

lSwitchEngine:

gosub lGearSpdBrk

fScepl:=!fScepl

if (!fScepl)

{

fnPlaySoundTHQ(iSoundSignaling)

gosub lMoveBrk

}

else

{

fnPlaySoundTHQ(iSoundToot)

gosub lMoveUp

}

return

;The two basic routines speed and braking to them all is based.

;Subprogramme the timer speed/acceleration.

lMoveUp:

gosub lGearTrc

if ((!fScepl) or (!fSpdOn) or (!fUDLR))

return

Send, {UP Down}

sleep %vGearSpd%

Send, {UP Up}

return

;Subprogramme the timer braking.

lMoveBrk:

gosub lGearTrc

if ((!fScepl) or (!fSpdOn) or (!fUDLR))

return

if (iGear=cMaxGear)

return

Send, {Down Down}

sleep %vGearBrk%

Send, {Down Up}

return

#UseHook, Off

#IfWinActive

;-----END--Для Saints Row: The Third

P.S. Так скрипт большой(около 1000 строк) и не у всех спойлер открываться(у моей жены - нет), то я прикрепил исходник THQ._ahk.txt

THQ._ahk.txt

Edited by Indomito

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...