Ru-Board.club
← Вернуться в раздел «Программы»

» AutoHotkey

Автор: alexeyAS
Дата сообщения: 21.05.2014 21:40
Добрый день.
Подскажите почему такой скрипт не работает в игре(в ворде, скайпе работает)
<i>
#NoEnv
#Persistent
#SingleInstance force
#HotkeyInterval 0
#InstallKeybdHook
#InstallMouseHook
#UseHook On
#MaxThreads 1
#MaxThreadsPerHotkey 1
SetBatchLines, -1
SetKeyDelay, 30, -1
SetTitleMatchMode, 2
DetectHiddenWindows, On

TAB::

Loop
{
Send {TAB}
Send 1
Sleep 3000
Send 3
Sleep 3000
Send 6
Sleep 3000
Send 3
Sleep 3000
Send 3
Sleep 10000

Send 4
}
return

Loop
{
Send {TAB}
Send 1
Sleep 3000
Send 3
Sleep 3000
Send 4
Sleep 3000
Send 3
Sleep 3000
Send 3
Sleep 10000

Send 4
}
return
</i>
Автор: alexeyAS
Дата сообщения: 23.05.2014 12:38
самое интересное, что такой же скрипт под ХП работает, у меня стоит Windows8 ребят подскажите в чем подвох?
Автор: Krot66
Дата сообщения: 23.05.2014 19:54
Попробуй SendInput он не зря в шаблонах скриптов стоит по умолчанию, хоть и менее совместим
Автор: Koresov
Дата сообщения: 28.05.2014 00:06
Как сделать, чтобы при открытии окна (браузера) с определенным заголовком, заголовок тут же заменялся на другой?
Автор: HeT BonpocoB
Дата сообщения: 29.05.2014 13:15
Koresov, мне думается лучше это замутить через расширения к самому браузеру...
ну или к локальному прокси/резчику рекламы типа handycache - admuncher
Автор: LonerDergunov
Дата сообщения: 29.05.2014 21:15
В AHK есть переменные, выдающие текущее разрешение рабочего стола.
В Wіndows можно ещё настроить "размер шрифта (и других элементов)" - маленький, средний, большой.
В Win8 эта настройка находится:
Control Panel\All Control Panel Items\Display
Подскажите, пожалуйста, - как через AHK-скрипт узнать состояние этого параметра?
Автор: Skif_off
Дата сообщения: 29.05.2014 21:30
LonerDergunov
RegRead?
Автор: LonerDergunov
Дата сообщения: 30.05.2014 14:03
Skif_off
Спасибо, логично ))
Данные можно считать из реестра.

А теперь вопрос посложнее. Имеется ссылка на файл (http, ftp). Каким образом можно узнать оригинальную дату модификации файла на сервере? (желательно не скачивая его). Интернет-качалки (Download Master) позволяют это как-то сделать, значит возможность есть.
Автор: Skif_off
Дата сообщения: 30.05.2014 14:27
LonerDergunov
Первая мысль - wget. Есть и вторая Вчера размышлял как обновлять автоматом MPC-BE...
Автор: LonerDergunov
Дата сообщения: 30.05.2014 15:40
Skif_off
Спасибо. А ведь я искал, помню в том году кучу вариаций находил и пробовал, пытался переделывать... и ничего так и не нашлось толкового.
Сейчас сходу нашлось решение для http (для ftp скрипт не подойдёт, но мне главное - http).
Теперь осталось только перевести запись "Fri, 25 Sep 2009 19:00:23 GMT" в формат YYYYMMDDHH24MISS, но это уже проще.
Автор: nickicool
Дата сообщения: 01.06.2014 12:59
здравствуйте!
У меня проблема с руками, в прямом смысле в общем)) поэтому мне очень сложно нажимать некоторые комбинации клавиш, особенно в играх, когда мешкать нет времени. Узнал об AHK, решил попробовать сделать бинд комбинаций клавиш на одну, но вот что то не получается - игра не воспринимает нажатие клавиши. Подскажите как правильно.

Задача моя - сделать бинд одновременного краткого нажатия клавиш А+Пробел (остальное сам сделаю по вашему примеру). Назначим это например на 1 (единицу). Так вот, если я просто пишу:

1::А

т.е. просто пытаясь переназначить клавишу, то игра реагирует на 1 так, как будто я нажимаю А, все вроде хорошо. Но если я пишу:

1::Send, {A}

то в этом случае уже ничего не происходит... почему я не знаю, а во всех гайдах используют именно такой синтаксис. Соответственно я не могу прописать и отправку нескольких клавиш (комбинацию), т.к. на выражение:

1::Send,{A}{Space}

игра не реагирует, а на такие:

1::{A}{Space}
1::A Space
1::A+{Space}

ругается сам AHK, ну это я уже сам пытался хоть что то придумать опираясь на самый первый пример приведенный мною.

Пробовал вместо Send писать SendInput и SendPlay - просто встречал в сети такие примеры... результат один - никакого.

Винда семерка, а игрушка первая Dark Souls.



Можно ли что ни будь тут сделать?
Автор: Krot66
Дата сообщения: 01.06.2014 21:31
Ругается правильно - такое недопустимо.
Попробуй 1::Send A
и 1::Send % "A "
Автор: nickicool
Дата сообщения: 01.06.2014 22:23
9::A
1::Send A
2::Send % "A "

... нет, работает только 9. Похоже у меня вообще не работает Send. Что делать? Запускаю игру НЕ от админа. Если от админа то и первая строка не работает.
Автор: Krot66
Дата сообщения: 02.06.2014 10:26
Еще вариант использовать виртуальные коды клавиатуры, определенные с помощью скрипта
Тогда будет
1::Send {vk41}
2::Send {vk41}{Space}
Вообще проверяй в обычном текстовом редакторе - тогда сразу будет видно - то, не то
Еще часто помогает записть в начале скрипта
SetKeyDelay 50, 50
Может понадобиться запись
2::Send {vk41}
Send {Space}
return

Метод Send наиболее совместимый, но часто работает только быстрый SendInput
Автор: nickicool
Дата сообщения: 02.06.2014 14:31
... похоже не судьба просто.
Спасибо!
Автор: yogar
Дата сообщения: 02.06.2014 20:46
nickicool
У меня рaботaет 1::Send,{A}{Space}, встaвляя 'A '
Может, дело в версии прогрaммы? У меня AutoHotkey 1.1.15.00 (ссылкa в шaпке)
Автор: LonerDergunov
Дата сообщения: 05.06.2014 01:59
Имеется окно с кнопками, чекбоксами...
Нужно нажимать кнопки в определённом порядке
ControlClick, Button1, ahk_class Win
ControlClick, Button2, ahk_class Win
ControlClick, Button3, ahk_class Win
Каким образом можно добиться гарантированного срабатывания нажатий (гарантированного срабатывания команды и только после этого перехода к следующей команде)?
У меня получается через раз - иногда отработают все кнопки, иногда какое-либо из нажатий пропустится. Пробую вставлять паузы Sleep - помогает, но не очень сильно. Пробую вначале передавать фокус ControlFocus - тоже не спасает ситуацию.
Вот такой вариант уже работает лучше, но его оптимальность мягко говоря сомнительна.
ControlFocus, Button1, ahk_class Win
ControlSend, Button1, {Space}, ahk_class Win
Автор: Krot66
Дата сообщения: 05.06.2014 16:18
Попробуй SetControlDelay
Автор: LonerDergunov
Дата сообщения: 07.06.2014 01:16

Цитата:
Попробуй SetControlDelay

Спасибо. Тоже вариант. Но тоже лишь увеличивает шансы срабатывания, не давая гарантированного результата.




Как можно отследить и сделать активным контрол под курсором мыши, сохранив при этом весь остальной мышиный функционал?
Вот пример набросал - в Total Commanderе если подвести курсор мыши к правой или левой файловой панели, то она становится активной.

Код: #NoEnv
#NoTrayIcon
#Persistent
#SingleInstance ignore
SetTimer subTimer, 200
subTimer:
if WinActive( "ahk_class TTOTAL_CMD" )
{
MouseGetPos, ,,, mControl
if ( mControl = "TMyListBox1" || mControl = "TMyListBox2" || mControl = "TMyListBox3" || mControl = "LCLListBox1" || mControl = "LCLListBox2" || mControl = "LCLListBox3" )
ControlFocus, % mControl, ahk_class TTOTAL_CMD
}
Автор: OnMyDSeeAtAll
Дата сообщения: 07.06.2014 07:01

Цитата:
Проблема в том, что...
У меня Ваш код ни каких проблем с мышью не выявил.
Цитата:
Как же правильно решить задачу?
Не знаю на счёт правильности, но как альтернативу команде ControlFocus можно [more=использовать]
Код: ; вид: дерево в отдельной панели - нет
; WM_USER+51 = 1075
; cm_FocusRight = 4002
; cm_FocusLeft = 4001

#Persistent
#KeyHistory
, 0
#SingleInstance,
Force
ListLines, Off
SetTimer
, % "SubTimer", 250
SubTimer:
If WinActive("ahk_class TTOTAL_CMD")
{
MouseGetPos,,,,
mControl
If (mControl~="ListBox")
PostMessage, 1075, 400 (
mControl~="1" ? 2:1)
}
Exit, (
mControl) And mControl:=""
Автор: LonerDergunov
Дата сообщения: 07.06.2014 17:29

Цитата:
У меня Ваш код ни каких проблем с мышью не выявил.

Интересно. У меня Win 8.1 x 64, TC 8.51a (чистый) - двойные клики при запущенном скрипте не всегда работают. Пробовал оптимизировать - вначале узнать на каком контролле фокус, а потом передать фокус контроллу только в случае если он под куросором и не-в-фокусе. Не помогло. Возможно, особенность программы (программы+ОС) - частые ControlGetFocus/ControlFocus "глушат" двойные клики - время между кликами должно быть меньше, чем время опроса панелей таймером.
Попробовал по аналогии передавать фокус в проводнике Win 8.1 x 64 между деревом каталогов слева и файловой панелью - скрипт работает отлично даже при очень частом таймере.


Код: #NoEnv
#NoTrayIcon
#Persistent
#SingleInstance ignore
SetTimer subTimer, 10
subTimer:
if WinActive( "ahk_class CabinetWClass" )
{
ControlGetFocus, mFocus, ahk_class CabinetWClass
MouseGetPos,,,, mControl
if (( mControl = "DirectUIHWND3" || mControl = "SysTreeView321" ) && mFocus != mControl )
ControlFocus, % mControl, ahk_class CabinetWClass
}
Автор: OnMyDSeeAtAll
Дата сообщения: 07.06.2014 23:07

Цитата:

Цитата: ...код ни каких проблем с мышью не выявил.
...двойные клики при запущенном скрипте не всегда работают.
Автор: LonerDergunov
Дата сообщения: 08.06.2014 03:24
Спасибо за пояснения. Взял на заметку, и заодно узнал как элегантно использовать регэкспы.
Благодаря этому скрипт для общего случая (с учётом открытия FTP и дерева каталогов в отдельной панели/панелях) удалось уместить буквально в несколько строк.
[more=Скрипт ))]
Код: #NoEnv
#NoTrayIcon
#Persistent
#KeyHistory, 0
#SingleInstance, force
ListLines, Off

SetTimer, mTimer, 200
mTimer:
If WinActive("ahk_class TTOTAL_CMD")
{
MouseGetPos,,,, mControl
if ( mControl ~= "ListBox" )
{
WinGet, TCHWND, ID, ahk_class TTOTAL_CMD
SeparateTree := 0
Loop, 3
{
ControlGetText, TMyText%A_Index%, TMyListBox%A_Index%, ahk_id %TCHWND%
ControlGetText, LCLText%A_Index%, LCLListBox%A_Index%, ahk_id %TCHWND%
if ( TMyText%A_Index% = "W_TreeList2" || LCLText%A_Index% = "W_TreeList2" )
{
SeparateTree := 2
break
}
else if ( TMyText%A_Index% = "W_TreeList1" || LCLText%A_Index% = "W_TreeList1" )
SeparateTree := 1
}

Loop, 3
{
LB%A_Index% := "ListBox" (SeparateTree + A_Index)
}

if ( mControl ~= LB1 )
PostMessage, 1075, 4002,,, ahk_class TTOTAL_CMD
else if ( mControl ~= LB3 )
PostMessage, 1075, 4001,,, ahk_class TTOTAL_CMD
else if ( mControl ~= LB2 )
{
WinGet, TCControls, ControlList, ahk_id %TCHWND%
TCFTPMode := 0
Loop, Parse, TCControls, `n, `r
{
if ( A_LoopField ~= LB3 )
{
TCFTPMode := 1
break
}
}
PostMessage, 1075, 400 (TCFTPMode="1" ? 2:1),,, ahk_class TTOTAL_CMD
}
}
}
Exit, (mControl) And mControl:=""
Автор: LonerDergunov
Дата сообщения: 09.06.2014 04:20
Имеется запись, например такого типа:

Код: IfWinActive, ahk_class СlassABC, ERROR!
Выполнить действия
IfWinActive, ahk_class СlassABC, ОШИБКА!
Выполнить действия
Автор: Krot66
Дата сообщения: 09.06.2014 15:04
Проще всего через выражения:
If WinActive("ahk_class ERROR!") Or WinActive("ahk_class ОШИБКА!")
Автор: vadim3sh
Дата сообщения: 10.06.2014 02:37
Привет.
Помогите пжлст с упрямцем:
RButton & LButton:: Send, #{vk43}
скрипт срабатывает, но после этого левая клавиша начинает работать как весь скрипт. Остановить безобразие можно нажав правую клавишу.
Автор: LonerDergunov
Дата сообщения: 12.06.2014 03:51
Krot66
Спасибо.
Возник такой вопрос по синтаксису. Если в команде Loop если идёт одна строка - её нужно брать в фигурные скобки или по аналогии с if...else скобки можно опустить?

Код: Loop, 3
{
MsgBox, Итерация %A_Index%.
}
Автор: OnMyDSeeAtAll
Дата сообщения: 12.06.2014 19:49
Krot66 17:04 09-06-2014
До [more=кучи]
Код: SetTitleMatchMode, RegEx
; ...
If WinActive
("ahk_class СlassABC, (?:ERROR|ОШИБКА)!")
; ...
Автор: LonerDergunov
Дата сообщения: 12.06.2014 20:00
OnMyDSeeAtAll

Цитата:
If пишет:

Про If - я понял. Можно ли по аналогии с этим - однострочный Loop тоже писать без кавычек? Или в команде Loop кавычки обязательны?
Автор: OnMyDSeeAtAll
Дата сообщения: 12.06.2014 20:02
Оперативно(!) Вы отвечаете, поправил свой ответ.

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: как добавить ивритские шрифты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.