Форматцевт Опубликовано 6 апреля, 2012 Жалоба Поделиться Опубликовано 6 апреля, 2012 (изменено) Благодарности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. Лень, да и зачем, но это IMHO2. Увы, таких было много, но 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\Думаю этого достаточно и так много написал. Продолжу в постах. Изменено 8 июня, 2015 пользователем Форматцевт 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 апреля, 2012 Автор Жалоба Поделиться Опубликовано 6 апреля, 2012 (изменено) 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. ) Изменено 18 апреля, 2012 пользователем Indomito 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 7 апреля, 2012 Автор Жалоба Поделиться Опубликовано 7 апреля, 2012 Полезный, как мне кажется, скрипт 1. Отключаем CapsLock CapsLock::return 2. CapsLock работает как Shift CapsLock::Shiftreturn 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 9 апреля, 2012 Автор Жалоба Поделиться Опубликовано 9 апреля, 2012 (изменено) Мне тут подарили/купили 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 Данный скрипт будет обновляться по мере его написания-дописания Изменено 9 апреля, 2012 пользователем Indomito 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 9 апреля, 2012 Автор Жалоба Поделиться Опубликовано 9 апреля, 2012 (изменено) Дополняю мои посты #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 Изменено 9 апреля, 2012 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 11 апреля, 2012 Автор Жалоба Поделиться Опубликовано 11 апреля, 2012 (изменено) Работа с буфером обмена :) Просто возник вопрос - вот решение. Скрипт можно помучить, дополнить и прикрутить 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. Могу его модифицировать, улучшить и поправить, если это кому то нужно. Изменено 11 апреля, 2012 пользователем Indomito 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 14 апреля, 2012 Автор Жалоба Поделиться Опубликовано 14 апреля, 2012 Для любителей 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 Скриншот Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 15 апреля, 2012 Автор Жалоба Поделиться Опубликовано 15 апреля, 2012 (изменено) Ещё немного про ... Буфер Обмена 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 правда будет мерцание, но это уже другая проблема и решается она иначе. Изменено 15 апреля, 2012 пользователем Indomito 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 апреля, 2012 Автор Жалоба Поделиться Опубликовано 20 апреля, 2012 (изменено) 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 Изменено 20 апреля, 2012 пользователем Indomito 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yezhishe Опубликовано 20 апреля, 2012 Жалоба Поделиться Опубликовано 20 апреля, 2012 Эм-м-м... Я, конечно, безмерно извиняюсь, но... Каковы принципиальные отличия от стандартной кнопки "Пуск"? Я не издеваюсь - мне просто интересно... Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 20 апреля, 2012 Жалоба Поделиться Опубликовано 20 апреля, 2012 Здравствуйте. У меня имеются колонки на компе 5.1, часто слушаю музон в наушниках. При постоянном переключении с колонок на наушники и обратно приходится в настройках драйвера звуковухи переключать режим Speakers 5.1 на Headphones и обратно соответственно. Вот хотел бы узнать, можно ли при помощи той софтины запилить скрипт, чтобы одним нажатием это переключение делать можно было? Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Yezhishe Опубликовано 20 апреля, 2012 Жалоба Поделиться Опубликовано 20 апреля, 2012 Я почему-то почти уверен в том, что можно даже настроить скрипт(ы) так, чтобы он(и) срабатывал(и) на реакцию звукового драйвера на (пере)подключение разъёмов... Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 апреля, 2012 Автор Жалоба Поделиться Опубликовано 20 апреля, 2012 (изменено) Эм-м-м... Я, конечно, безмерно извиняюсь, но... Каковы принципиальные отличия от стандартной кнопки "Пуск"? Я не издеваюсь - мне просто интересно... ни какой, мне просто так нравится :DP.S. У меня кнопка ПУСК отсутствует за ненадобностью ;) да, да - я извращенец )))) Изменено 20 апреля, 2012 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 апреля, 2012 Автор Жалоба Поделиться Опубликовано 20 апреля, 2012 @Shadow TH, можно, именно я это и сделал, смотри мой первый пост #1. Правда есть отличия в задаче, но не принципиальные. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 20 апреля, 2012 Автор Жалоба Поделиться Опубликовано 20 апреля, 2012 (изменено) Может кому то пригодится. Скрипт показывает список элементов (при наведении) управления активного окна. Для разработки скриптов и программ, можно добавить сохранение в файл по ЛКМ и выход из скрипта по ПКМ. ;Показывает в реальном времени список элементов управления активного окна:#PersistentSetTimer, WatchActiveWindow, 200returnWatchActiveWindow:WinGet, ControlList, ControlList, AToolTip, %ControlList%return P.S. Для браузеров не подходит. Изменено 20 апреля, 2012 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 23 апреля, 2012 Автор Жалоба Поделиться Опубликовано 23 апреля, 2012 Я вообщем то не собирался писать этот скрипт, но просто понадобилось сформировать набор списка файлов с прослушиванием, ну и началось :D В скрипте есть всего понемногу: - файловые операции; - GUI (совсем чуть-чуть); - циклы и работа с массивами; - ну и т.д. и т.п. Писал 10-15 минут, так что не очень заботился об алгоритмизации - извиняйте. #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 - ну это как всегда ;) Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 24 апреля, 2012 Автор Жалоба Поделиться Опубликовано 24 апреля, 2012 (изменено) Решил переделать то что написал выше и вот что вышло - не судите строго. Вот EXEшник - FndWav.zip Вот исходник - FndWav.ahk Нашёл баг - надо всё же использовать ключ, т.е. FndWav.exe /m f:\torrent\book\Роберт Шекли - Cборник рассказов а то получается куча параметров из-за пробела в имени пути... случайно обнаружил ;) Хотя можно проверять на m или w или 3 - но получается сложный алгоритм и мало ли что ещё мне задумается искать или делать установки. :D P.S. Админ! Пропадают LF|CR при редактировании - 5 раз перегружал страницу... не порядок однако ;) Изменено 26 апреля, 2012 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 5 января, 2013 Автор Жалоба Поделиться Опубликовано 5 января, 2013 (изменено) Давно я не писал (ДА ДА вижу предупреждения, но тема моя же) и так о компиляции скриптоФ и от трее Это фрагмент файла 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*******************;********************************************* Далее запускаем компилятор и радуемся - иконки и т.д. буду там где надо. Вот что я хотел написать - вроде всё. Изменено 5 января, 2013 пользователем Indomito 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 6 января, 2013 Автор Жалоба Поделиться Опубликовано 6 января, 2013 (изменено) @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 Изменено 6 января, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 7 января, 2013 Автор Жалоба Поделиться Опубликовано 7 января, 2013 (изменено) В дополнение к посту #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 ; И выходим Изменено 7 января, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 7 января, 2013 Автор Жалоба Поделиться Опубликовано 7 января, 2013 (изменено) 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)} Запускаешь её, нажимаешь на кнопку и там где курсор мышки появится - тебе нужно то что начинается с 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% это очень простая программа переназначения. Изменено 7 января, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 22 января, 2013 Автор Жалоба Поделиться Опубликовано 22 января, 2013 (изменено) Для тех кто использует 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 Изменено 24 января, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Леха Н Опубликовано 8 октября, 2013 Жалоба Поделиться Опубликовано 8 октября, 2013 Всем привет подскажите если у кого скрипты или мог бы их сделать для кликера пилот на игру русская рыбалка или фантастическая рыбалка для того что бы рыбу сама ловила)) заранее спс. Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 14 октября, 2013 Автор Жалоба Поделиться Опубликовано 14 октября, 2013 (изменено) @Леха Н, можно и делали на AHK... загляни на "Серый Форум". Просто не хочется копи-пасте заниматься, я здесь публикую что сам написал и на 99,9% работает. UPD Хотя могу помочь, но нужно описание задачи. для кликера пилот... что за "пилот" - используй обычные скриптовые языки приспособленные для управления клавиатурой, мышкой и событиями в приложениях, так намного проще. Изменено 14 октября, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Форматцевт Опубликовано 14 октября, 2013 Автор Жалоба Поделиться Опубликовано 14 октября, 2013 (изменено) Я тут решил поиграть в 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 Изменено 14 октября, 2013 пользователем Indomito Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти