1 (изменено: Dworkin, 2013-04-06 17:49:29)

Тема: AHK: Определенное выполнение действий при зажатой клавише

Здравствуйте. Пытаюсь сделать скрипт что бы при зажатой клавише например vk58 (X) в адресе памяти записывался 0 байт то есть включено, а при отжатой X в адресе памяти записывалось значение = 1 байт то есть выключено.
Адрес куда вписывать значение = 0xB6EC2E.
Значение вписывать в byte то есть Char 1 - выкл, 0 - вкл.

processName := "процес.exe"
Address := 0xB6EC2E

vk58::
    Loop {
        ProcessWriteMemory(0, baseAddressPointer, processName, "Char") ; включено
        If(GetKeyState("vk58", "P")=0)
            ProcessWriteMemory(1, baseAddressPointer, processName, "Char") ; выключено
    }

ProcessWriteMemory(data, address, processIDorName, type := "Int", numBytes := 4) {
    VarSetCapacity(buf, numBytes, 0)
    NumPut(data, buf, 0, type)

    Process Exist, %processIDorName%
    if !processID := ErrorLevel
        throw Exception("Invalid process name or process ID:`n`n""" . processIDorName . 

"""")

    if !processHandle := DllCall("OpenProcess", "Int", 40, "UInt", 0, "UInt", processID, 

"Ptr")
        throw Exception("Failed to open process.`n`nError code:`t" . A_LastError)

    result := DllCall("WriteProcessMemory", "Ptr", processHandle, "Ptr", address, "Ptr", 

&buf, "Ptr", numBytes, "UInt", 0, "UInt")

    if !DllCall("CloseHandle", "Ptr", processHandle, "UInt") && !result
        throw Exception("Failed to close process handle.`n`nError code:`t" . A_LastError)

    if !result
        throw Exception("Failed to write process memory.`n`nError code:`t" . A_LastError)

    return result
}

Когда зажимаю X то нормально работает, но когда я отжимаю X то видно что оно то врубается то вырубается.
Можно как-то сделать что бы, когда я зажал клавишу X он вписал в память 1 раз 0 байт - включено, а когда я отжал X - вписал 1 байт - выключено?

2

Re: AHK: Определенное выполнение действий при зажатой клавише

Лучше KeyWait использовать, т.е. ожидать отпускания клавиши.

3

Re: AHK: Определенное выполнение действий при зажатой клавише

processName := "процес.exe"
Address := 0xB6EC2E

vk58::
    ProcessWriteMemory(0, Address, processName, "Char") ; включено
    KeyWait vk58
    ProcessWriteMemory(1, Address, processName, "Char") ; выключено
    return

4

Re: AHK: Определенное выполнение действий при зажатой клавише

Спасибо огромное работает