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

» AutoHotkey

Автор: TeoLeo22
Дата сообщения: 13.02.2014 15:41
Кто-нибудь знает, как в Autohotkey переназначить сочетание клавиш ctrl+C, ctrl+V на одну клавишу?
Пробывал: F7::^c не выходит. Писал ctrl буквами, с пробелами, со значком & - все без результатов.
Автор: subzeronoobsaibot
Дата сообщения: 13.02.2014 15:50
Аутохоткей может эмулировать нажатие клавиш или только текст вставлять ?
Почему в играх она не работает ?
Кто пробовал использовать в играх отзовитесь.
Автор: HeT BonpocoB
Дата сообщения: 13.02.2014 19:56
TeoLeo22
у меня на кнопках джойстика копи и пэйст ппеределай как надо...

Код: ;---------------------------------------------------------------------------copy
Joy7::
clipboard =
Send, ^{sc02E}
ClipWait 2
if ErrorLevel
return
ToolTip, copied
Sleep, 200
ToolTip
return
;---------------------------------------------------------------------------paste
Joy8::
Send, ^{sc02F}
return
Автор: vadim3sh
Дата сообщения: 13.02.2014 21:28
subzeronoobsaibot

Цитата:
Почему в играх она не работает ?
Кто пробовал использовать в играх отзовитесь.

всего 7 постов вверх про это говорим
HeT BonpocoB

Цитата:
просто переназначить любую кнопку

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

Цитата:
Некоторые игры используют в своей работе только механизм DirectInput. Как следствие, такое приложение может игнорировать все эмуляции нажатий клавиш и кнопок мыши. Несмотря на то, что серьёзной работы по этому вопросу ещё не проводилось, было обнаружено, что для большинства игр увеличение параметра SetKeyDelay явилось эффективным для включения в работу команды Send. Попробуйте сделать так:

SetKeyDelay, 10, 10
SetKeyDelay, 0, 10



Автор: subzeronoobsaibot
Дата сообщения: 14.02.2014 10:51
Вот нарыл на иностранном форуме

SetKeyDelay, 50, 0

q::
send {down down}
send {right down}
send {down up}{a down}
send {a up}{right up}
return
Это для стрит файтера, а мне для мортала надо, вот пытаюсь делать так
SetKeyDelay, 10, 10
5::
{
send {down }
send {right }
send Numpad1
}
return
Но иногда срабатывает, а иногда нет.
Саб зиро должен заморозить, он делает какие то движения разные и скрипт иногда как то залипает я кнопку не держу а он двигается, да еще и по разному то есть комбо не в той последовательности что я задал.

Цитата:
но думаю именно онлайн-игры могут считать его за чит и какнить перехватывать...

Я играю в файтинги (драки), онлайн рпг меня не интересуют.
SetKeyDelay пробовал разные цифры подставлять но стабильности не было.
Еще проги ЭМУЛИРУЮЩИЕ нажатие клавиш есть? Текст вставлять мне не надо, мне надо комбо. Не для чатов а чтобы комбинация ударов сработала, в идеале бруталити к примеру.

Автор: HeT BonpocoB
Дата сообщения: 14.02.2014 15:32
subzeronoobsaibot
Цитата:
Но иногда срабатывает, а иногда нет.

там надо отладкой скрипта скурпулёзно заниматся, > вот < первый нагугленный скрипт (внизу там) для примера...

Код: joy6::
sleep, 400
send, {left down}
sleep, 40
send, {left up}
sleep, 20
send, {down down}
sleep, 40
send, {down up}
sleep, 20
sendinput, {left down} {c down}
sleep, 60
send, {left up} {c up}
return
Автор: subzeronoobsaibot
Дата сообщения: 14.02.2014 17:19
Так ладно, тот скрипт что ты дал, то что игра реагирует уже радует, но как заставить челов
из игры не просто двигаться как попало а делать конкретные движения в той последовательности в какой написано в скрипте ?
Сайт который ты показал я уже видел ничего по делу я найти не смог.
Если шариш реально может попробуешь на досуге заставить саб зиро заморозить,
а я на примере разберусь может, только чтоб стабильно а не 1 раз из 10 срабатывало.
Или может посоветуешь другую программу, ну или к кому еще обратится можно ?

Автор: HeT BonpocoB
Дата сообщения: 14.02.2014 19:11
subzeronoobsaibot, не... я и в программировании не ас, а уж в игре тем более

аналогичные программы должны быть, но то что ahk^ самая продвинутая вроде однозначно...

я раньше пробовал только Neo Sign 0f Misery , но там немного другая направленность, да и подзабыл уже честно говоря как там что.

в твоём деле думаю лучше найти какой нить посещаемый форум именно по этой игре и там спросить. там народ более заинтересован, если и нет уже написанных скриптов, так как минимум можно кого ни будь вдохновить на их написание
Автор: TeoLeo22
Дата сообщения: 16.02.2014 13:49

Цитата:
Кто-нибудь знает, как в Autohotkey переназначить сочетание клавиш ctrl+C, ctrl+V на одну клавишу?   Пробывал: F7::^c не выходит. Писал ctrl буквами, с пробелами, со значком & - все без результатов.

Если кому пригодится, нашел как:
F7::
SendInput {CtrlDown}{vk43}{CtrlUp}
Return

F8::
SendInput {CtrlDown}{vk56}{CtrlUp}
Return
Автор: Cryzer
Дата сообщения: 16.02.2014 18:14
Добрый день!
Не подскажите, как можно при нажатии на колёсико мыши сделать обновление (F5) текущего окна проводника Windоws 7 ? Т.е. чтобы не нажимать ПКМ -> "Обновить", а сделать это через колёсико.
Код MButton::F5 не подойдёт, т.к. срабатывает везде, а мне нужно только для проводника.
В AutoHotkey я новичёк, поэтому прошу помощи
Автор: vadim3sh
Дата сообщения: 16.02.2014 21:47
Cryzer

Цитата:
AutoHotkey я новичёк

Давайте так: если здесь ничего не подберете, тогда попробуем разбираться
TeoLeo22

Цитата:
Пробывал: F7::^c

Может быть, есть смысл написать в шапке, что при наличии 2 раскладок надо бы использовать {vk...}?
все новенькие на эти грабли наступают...
Автор: Cryzer
Дата сообщения: 17.02.2014 15:24
vadim3sh
Спасибо за ссылку, очень полезный материал! За пару часов смог сам реализовать то, что хотел, даже не думал, что получится)
Вот мой код:

Код: #IfWinActive ahk_class CabinetWClass
MButton::
    WinGetPos, X, Y, W, H
    X:=X+4                    ; координата активного окна без учёта рамки
    Y:=Y+4                    ; координата активного окна без учёта рамки
    W:=W-8                    ; длина активного окна без учёта рамок
    H:=H-8                    ; высота активного окна без учёта рамок
    MouseGetPos, mX, mY
    mX:=mX-4                ; координата указателя мыши относительно активного окна без учёта рамки
    mY:=mY-4                ; координата указателя мыши относительно активного окна без учёта рамки
    WX:=W+X
    HY:=H+Y
;    MsgBox, X=%X%, W=%W%, mX=%mX%, Y=%Y%, H=%H%, mY=%mY%, (W+X=%WX%), (H+Y=%HY%)

    if (mX >= 0 && mY >= 0 && mX < W && mY < H)
    {
;        MsgBox F5
        Send {F5}
    }
return
Автор: OnMyDSeeAtAll
Дата сообщения: 18.02.2014 18:02
1ANP Если тема DOpus ещё актуальна, дайте знать.
Cryzer
Код: MButton::Send % WinActive("ahk_class CabinetWClass") ? "{F5}":"{MButton}"
Автор: Cryzer
Дата сообщения: 18.02.2014 23:48
OnMyDSeeAtAll, спасибо!
Хотя код работает не так, как надо, но зато я подчерпнул из него синтаксис, который мне помог доработать свой код)
Автор: vadim3sh
Дата сообщения: 19.02.2014 00:22
Cryzer

Цитата:
синтаксис, который мне помог доработать свой код

и..?
Автор: OnMyDSeeAtAll
Дата сообщения: 19.02.2014 08:43
Cryzer
20:14 16-02-2014
Цитата:
...как можно при нажатии на колёсико мыши сделать обновление (F5) текущего окна проводника Windоws 7 ?
17:24 17-02-2014
Цитата:
...действия выполняются только внутри окна. За пределами активного окна колёсико не реагирует. Как это исправить?

Код: MButton::Send ...
Автор: Cryzer
Дата сообщения: 19.02.2014 11:36
OnMyDSeeAtAll, я имел ввиду, что действия скрипта не должны распространяться за пределы активного окна.

Вобщем, разобравшись поглубже в AutoHotkey, я переработал свой код. Оказывается, всё можно сделать проще. Плюс я ещё усовершенствовал его.
[more=Код]
Код: mode:=1

~MButton::
if (WinActive("ahk_class CabinetWClass") != 0 && mode=1)
{
    if (A_PriorHotkey <> "~MButton" || A_TimeSincePriorHotkey > 500)    ; если одинарное нажатие СКМ
    {
        KeyWait, MButton
        ; ---------------------------------------------------------------------------
        Send {F5}
        ; ---------------------------------------------------------------------------
        return
    }
    if (ErrorLevel=0)                                                    ; если двойное нажатие СКМ
    {
        mode:=2
        SoundPlay, mode.wav
        ;MsgBox, Переход в режим 2
        return
    }
}

~LButton::
if (WinActive("ahk_class CabinetWClass") != 0 && mode=2)
{
    if (A_PriorHotkey <> "~MButton" || A_TimeSincePriorHotkey > 500)    ; если одинарное нажатие СКМ
    {
        KeyWait, MButton
        ; ---------------------------------------------------------------------------
        if (GetKeyState("LButton", "P") != 0)                            ; если ЛКМ была нажата
        {
            loop
            {
                if (GetKeyState("LButton", "P") = 0)                    ; если ЛКМ уже не нажата (отпущена)
                {
                    ;MsgBox, ЛКМ отпущена
                    Send {F5}
                    break
                }
            }
        }
        ; ---------------------------------------------------------------------------
        return
    }
    if (ErrorLevel=0)                                                    ; если двойное нажатие СКМ
    {
        mode:=1
        SoundPlay, mode.wav
        ;MsgBox, Переход в режим 1
        return
    }
}
return
Автор: OnMyDSeeAtAll
Дата сообщения: 20.02.2014 00:13

Код: Menu, Tray, Tip, % "mode "mode:=0

~MButton::
If WinActive("ahk_class CabinetWClass")
If A_TimeSincePriorHotkey
Between 0 And 500
ShowTip(mode^=1)
Else If
Not mode
Send, {F5}
Return

~LButton::
KeyWait, LButton
If WinActive("ahk_class CabinetWClass")
And mode
Send, {F5}
Return

ShowTip(p1, p2:=750)
{
Menu,
Tray, Tip, % "mode "p1
TrayTip,, % "mode "p1
Sleep, p2
TrayTip
}
Автор: Cryzer
Дата сообщения: 20.02.2014 16:59
OnMyDSeeAtAll
Спасибо, работает чётко!
Единственное, во время отображения TrayTip не срабатывает (из-за паузы) кнопка ~MButton:: в скрипте. Возможно ли это исправить?

Добавлено:
И ещё спрошу: может ли AutoHotkey определить, что после зажатия ЛКМ (в проводнике) под курсором выделилась(находится) папка/файл?
Было бы идеально, если бы обновление в "mode 1" происходило только после перемещения папки/файла)
Автор: OnMyDSeeAtAll
Дата сообщения: 20.02.2014 23:28

Цитата:
...во время отображения TrayTip не срабатывает (из-за паузы) кнопка ~MButton...
АХК однопоточен. И потом, если без паузы, как отлавливать в череде кликов двойной?
Цитата:
Возможно ли это исправить?
Ну коли Вы так спешите можно сделать паузу [more=меньше.]
Код: ; ...
~MButton::
If WinActive("ahk_class CabinetWClass")
If A_TimeSincePriorHotkey
Between 0 And 300
; ...
ShowTip(p1, p2:=305)
{
; ...
Автор: Cryzer
Дата сообщения: 21.02.2014 09:47
OnMyDSeeAtAll

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

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

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

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

Цитата:
...у меня он ничего не отобразил...
Интерпретатор (АХК) должен выдать сообщение об ошибке (если таковая имеется), [more=пример.]
Код: obj:=ComObjCreate("{00000000-0000-0000-0000-000000000000}")
Автор: oshizelly
Дата сообщения: 21.02.2014 15:03
сорри, ошибся темой, не ту кнопку нажал.
Автор: Cryzer
Дата сообщения: 21.02.2014 16:15
OnMyDSeeAtAll
Я понял, в чём проблема. Программа Folder Options X что-то делает в системе, после чего Ваш код не срабатывает, как надо. Если в ней отключить все настройки (в т.ч. вернуть автоматическую сортировку), то код начинает работать нормально (причём обе версии) и в трее всё выводится...
Жалко... Но всё равно спасибо! Буду пытаться найти решение)
Автор: Cryzer
Дата сообщения: 24.02.2014 15:59
OnMyDSeeAtAll, а можно попросить Вас подправить последний код?
Если я правильно понял, в Windоws 7 для отключения автоматической сортировки файлов и папок DirectUIHWND заменяется на SysListView32 (не очень представляю, что это такое) (судя по всему, программа Folder Options X как раз это и делает), а в Вашем коде присутствует "DirectUIHWND3". Может быть в этом причина?
Как нужно изменить код, чтобы работало для SysListView32? (пробовал заменить на это слово - не помогло)
Автор: OnMyDSeeAtAll
Дата сообщения: 24.02.2014 19:18

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

Код: ; ...
; And classNN="DirectUIHWND3")
And
classNN~="DirectUIHWND3|SysListView321")
; ...
Автор: Cryzer
Дата сообщения: 25.02.2014 09:07
OnMyDSeeAtAll, спасибо! Теперь всё работает!
Автор: Cryzer
Дата сообщения: 26.02.2014 20:34
Возник ещё такой вопрос. В сети ответа не нашёл...

Как в текущей папке проводника выделить находящиеся в ней файлы и/или папки, зная их имена? Выделить нужно только те, чьи имена заданы. Возможно ли такое?
Зачем нужно: после перемещения файлов или папок (при отключённой автоматической сортировке) их выделение иногда сбрасывается, поэтому хотелось бы его вернуть обратно.
В сети нашёл один [more=код]
Код: /*
    Library for getting info from a specific explorer window (if window handle not specified, the currently active
    window will be used). Requires AHK_L or similar. Works with the desktop. Does not currently work with save
    dialogs and such.
    
    
    Explorer_GetSelected(hwnd="") - paths of target window's selected items
    Explorer_GetAll(hwnd="") - paths of all items in the target window's folder
    Explorer_GetPath(hwnd="") - path of target window's folder
    
    example:
        F1::
            path := Explorer_GetPath()
            all := Explorer_GetAll()
            sel := Explorer_GetSelected()
            MsgBox % path
            MsgBox % all
            MsgBox % sel
        return
    
    Joshua A. Kinnison
    2011-04-27, 16:12
*/

Explorer_GetPath(hwnd="")
{
    if !(window := Explorer_GetWindow(hwnd))
        return ErrorLevel := "ERROR"
    if (window="desktop")
        return A_Desktop
    path := window.LocationURL
    path := RegExReplace(path, "ftp://.*@","ftp://")
    StringReplace, path, path, file:///
    StringReplace, path, path, /, \, All
    
    ; thanks to polyethene
    Loop
        If RegExMatch(path, "i)(?<=%)[\da-f]{1,2}", hex)
            StringReplace, path, path, `%%hex%, % Chr("0x" . hex), All
        Else Break
    return path
}
Explorer_GetAll(hwnd="")
{
    return Explorer_Get(hwnd)
}
Explorer_GetSelected(hwnd="")
{
    return Explorer_Get(hwnd,true)
}

Explorer_GetWindow(hwnd="")
{
    ; thanks to jethrow for some pointers here
WinGet, process, processName, % "ahk_id" hwnd := hwnd? hwnd:WinExist("A")
WinGetClass class, ahk_id %hwnd%
    
    if (process!="explorer.exe")
        return
    if (class ~= "(Cabinet|Explore)WClass")
    {
        for window in ComObjCreate("Shell.Application").Windows
            if (window.hwnd==hwnd)
                return window
    }
    else if (class ~= "Progman|WorkerW")
        return "desktop" ; desktop found
}
Explorer_Get(hwnd="",selection=false)
{
    if !(window := Explorer_GetWindow(hwnd))
        return ErrorLevel := "ERROR"
    if (window="desktop")
    {
        ControlGet, hwWindow, HWND,, SysListView321, ahk_class Progman
        if !hwWindow ; #D mode
            ControlGet, hwWindow, HWND,, SysListView321, A
        ControlGet, files, List, % ( selection ? "Selected":"") "Col1",,ahk_id %hwWindow%
        base := SubStr(A_Desktop,0,1)=="\" ? SubStr(A_Desktop,1,-1) : A_Desktop
        Loop, Parse, files, `n, `r
        {
            path := base "\" A_LoopField
            IfExist %path% ; ignore special icons like Computer (at least for now)
                ret .= path "`n"
        }
    }
    else
    {
        if selection
            collection := window.document.SelectedItems
        else
            collection := window.document.Folder.Items
        for item in collection
            ret .= item.path "`n"
    }
    return Trim(ret,"`n")
}
Автор: OnMyDSeeAtAll
Дата сообщения: 26.02.2014 23:17
Cryzer 22:34 26-02-2014

Цитата:
В сети ответа не нашёл...
Хотя он там есть.
Автор: Cryzer
Дата сообщения: 27.02.2014 19:39
OnMyDSeeAtAll, очередной раз спасибо!)

Страницы: 12345678910111213141516171819202122232425262728293031323334

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


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