Что нового

Однократное срабатывание функции по горячей клавише

QQruza

Новичок
Сообщения
26
Репутация
0
Код из мануала, только отредактировал функцию "ShowMessage", чтобы сообщение в консоль выдавала.
Проблема в том, что если нажать и держать Shift-Alt-d, то в консоль будет без перерыва выводится сообщение, можно ли сделать так, чтобы функция срабатывала только по однократному нажатию комбинации клавиш, а далее скрипт ждал пока пользователь клавишу отпустит и снова сработает только при следующем нажатии клавиши.
Одно нажатие, один вызов функции без залипания.

Код:
; Нажимайте Esc, чтобы завершить скрипт, и Pause/Break, чтобы приостановить

Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d для вызова сообщения

MsgBox(4096, 'Сообщение', 'Нажмите горячую клавишу Pause/Break,' & @CRLF & 'чтобы увидеть как это работает.')

;=== Тело программы должно находится здесь ;===
While 1
    Sleep(100)
WEnd
;===

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    ToolTip("")
EndFunc

Func Terminate()
    Exit 0
EndFunc

Func ShowMessage()
;~     MsgBox(4096, "", "Это сообщение.")
         ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Shift-Alt-d' & @CRLF)
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
#include <Misc.au3>

; Нажимайте Esc, чтобы завершить скрипт, и Pause/Break, чтобы приостановить

Global $Paused

HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+!d", "ShowMessage") ; Shift-Alt-d для вызова сообщения

MsgBox(4096, 'Сообщение', 'Нажмите горячую клавишу Pause/Break,' & @CRLF & 'чтобы увидеть как это работает.')

;=== Тело программы должно находится здесь ;===
While 1
    Sleep(100)
WEnd
;===

Func TogglePause()
    $Paused = Not $Paused
    
    While $Paused
        Sleep(100)
        ToolTip('Скрипт приостановлен')
    WEnd
    
    ToolTip('')
EndFunc

Func Terminate()
    Exit 0
EndFunc

Func ShowMessage()
    HotKeySet(@HotKeyPressed)
    
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : Shift-Alt-d' & @CRLF)
    
    ;Wait until hotkey released
    While _IsPressed(10) Or _IsPressed(12) Or _IsPressed(44) ;"Shift + Alt + D"
        Sleep(10)
    WEnd
    
    HotKeySet(@HotKeyPressed, 'ShowMessage')
EndFunc
 
Верх