1 (изменено: Mikki, 2013-04-30 19:39:46)

Тема: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

<-пробная версия, если сообщество одобрям-с->


-------------------------------------------------------------------------------
=                                                                             =
=  Здесь вы найдете примеры кода и ссылки на подсказки по логическим          =
=      схемам и синтаксису языка [b]AutoHotkey[/b].                           =
=                                                                             =
=                                  v.0.0.4                                    =
-------------------------------------------------------------------------------

Синтаксис

AHK: знак процента внутри выражений ;
   AHK: Знак процента и задание опций GUI-элемента

+ открыть спойлер
так не правильно (синтаксис не корректный):
MsgBox, % h%A_Index+2%

так правильно:
j:=A_Index+2
MsgBox, % h%j%

- Указать, что число записано в шестнадцатеричном формате, а не в десятичном (например 2212) :

+ открыть спойлер
var := 2212 ; записываем десятичное, но на самом деле собираемся использовать как шестнадцатеричное.
H1:="0x" var

-AHK: Запись масива в INI файл

+ открыть спойлер
indexA := [1,2,3,4,5]

    Splitpath, A_ScriptName,,,, fileName
    IniName:= A_ScriptDir . "\" . fileName . ".ini"

    Loop % indexA.MaxIndex() 
    {
        indexList := indexList indexA[A_Index] ","
    }
    IniWrite, %indexList%, % IniName, Settings, indexList

- Считать несколько заголовков окон

+ открыть спойлер
SetTitleMatchMode, 2
WinGet, List, List, Блокнот
Loop % List
   WinGetTitle, Title%A_Index%, % "ahk_id" List%A_Index%


Алгоритмы

- Задержка срабатывания выборочной горячей клавиши - на примере ЛевогоШифта

+ открыть спойлер
*LShift::
   sleep 1000
   if GetKeyState("LShift", "P")
      SendInput {LShift Down}
Return
*LShift Up:: SendInput {LShift Up}

- Остановка (Пауза) скрипта при нажатии определенных клавиш (например Alt, Ctrl, Shft)

+ открыть спойлер
Loop
{
   if !(GetKeyState("Alt", "P") || GetKeyState("Ctrl", "P") || GetKeyState("Shift", "P"))
      Send {F7}
   Sleep, 100
}

- Укороченная запись нескольких горячих клавиш с похожими действиями

+ открыть спойлер
f11::
f12::
    send, 1
    if (A_ThisHotkey <> "f12") {
        send, 2
        send, 3
        send, 4
    }
    send, 5
    return

- Перетаскивание GUI-окна за любую его часть - в каждой gLabel придется вставить конструкцию  WinMove(WinID) , if moved..

+ открыть спойлер
Button:
    WinMove(WinID)
    if moved
        return
    MsgBox, Button
    return

WinMove(WinID)
{
    global moved, hGui
    CoordMode, Mouse
    SetWinDelay, -1
    SetBatchLines, -1
    moved:=
    MouseGetPos, Start_X, Start_Y
    WinGetPos, X_Win, Y_Win,,, ahk_id %WinID%
    While GetKeyState("LButton", "P")
    {
        MouseGetPos, Current_X, Current_Y
        moved := (Current_X != Start_X || Current_Y != Start_Y) ? 1 : ""
        WinMove, ahk_id %WinID%,, X_Win + Current_X - Start_X, Y_Win + Current_Y - Start_Y
        Sleep, 10
    }
}

~LButton::
    MouseGetPos,,, WinID
    if (WinID = hGui)
        WinMove(WinID)
    return

- Получать сообщение о активации\деактивации окон в системе

+ открыть спойлер
CoordMode, ToolTip, Screen
DllCall("RegisterShellHookWindow", "UInt", A_ScriptHwnd) 
OnMessage(DllCall("RegisterWindowMessage", "str", "SHELLHOOK"), "ShellProc") 
OnExit, Exit
Return

ShellProc(nCode, wParam)
{ 
    static A := 1
    If (nCode = 4)
    { 
        WinGet, Process, ProcessName, % !wParam ? "A" : "ahk_id " wParam 
        ToolTip % A++ "`n`n" Process, 15, 15
    }    
} 

Exit:
    DllCall("DeregisterShellHookWindow", "UInt", A_ScriptHwnd)
    ExitApp

- Запоминание данных GUI-элементов (на пример - CheckBox)


Философия

- Диалог о тщетности коментописания


- Что приходится делать читающему, чтобы понять вопрос.

+ открыть спойлер

http://s2.developerslife.ru/public/images/gifs/0afa5945-c345-49ff-bc97-0a7446433d42.gif

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

2

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

Накидайте ссылок на темы которые надо добавить.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

3 (изменено: creature.ws, 2013-04-19 13:55:35)

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

так не правильно:
MsgBox, % h%A_Index+2%
так правильно:
MsgBox, % h%A_Index%+2

Фрагменты кода (как мне кажется) подразумевают различный результат.
Синтаксис первого выражения неприемлемый, но второе выражение не является «правильной» альтернативой первого.

h%A_Index+2%

Если бы это работало, то результатом было бы содержимое переменной, имя которой состоит из строки "h" и числа являющегося суммой переменной A_index и 2.

varIndex := A_index + 2
msgbox % h%varIndex%


- Как правильно написать шестнадцатеричное число (например 2212) :

H1:="0x"2212

Не согласен с приведенным кодом.
  
Вот прям так взять и записать шестнадцатеричное число в переменную:

h1 := 0x2212

Указать, что в переменной шестнадцетиричное число:

var := 2212 ; записываем десятичное, но на самом деле собираемся использовать как шестнадцетиричное.
h1 := "0x" var


IniName := A_ScriptDir "\" RegExReplace(A_ScriptName, "(.*)\..*", "$1") ".ini"
Splitpath, A_ScriptName,,,, fileName
iniPath := A_ScriptDir . "\" . fileName . ".ini"

4

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

Спасибо creature.ws за комментарии. Внес исправления и убрал все коды под спойлеры.

Помнится завсегдатаи сетовали что много однотипных просьб с "закодьте мне пять кликов когда я нажимаю один раз". Тыкните в подобные темы. Попытаюсь сделать из них какую-то компиляцию.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

5 (изменено: creature.ws, 2013-04-20 14:14:52)

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

так не правильно (синтаксис вообще не корректный):
MsgBox, % h%A_Index+2%

так правильно:
MsgBox, % "h" A_Index+2
i := 1
h3 := 42

MsgBox % "h" i+2

j := i + 2
MsgBox % h%j%


Попытаюсь сделать из них какую-то компиляцию.

Новые пользователи, задающие однотипные вопросы, не читают справку, не пользуются поиском по форуму, не будут читать подобную тему.

У каждого нового пользователя уникальная клавиатура и мышь, без всякого сомнения уникальные папиллярные узоры на пальцах, жмущих кнопки и клавиши, каждый пользователь просто вынужден спрашивать как закодить пять кликов когда он нажимет один раз, ведь все предыдущие темы с подобными вопросами не имели к нему отношения.
Одной темой форума проблему уникальности нового пользователя не решить.

6

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

Но можно дать ссылку на подобную тему вместо подобного ответа.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK/OFF: N.F.A.Q (Noob Frequently Asked Questions)

+ AHK: Длительность нажатия горячей клавиши
Adept пишет:

Можно ли на одну и ту же клавишу назначить разные макросы при том, что один из них будет вызываться по обычному (короткому) нажатию, а другой - по длительному (500-1000 мс)? Как прописать назначение горячей клавиши в последнем случае?

serzh82saratov пишет:
Space::
    KeyWait Space, T0.5 
    If ErrorLevel 
    {
        KeyWait Space
        ToolTip long
    }    
    Else    
    {
        ToolTip short
    }    
    return