Что нового

IsPressed по времени

Isn

Новичок
Сообщения
119
Репутация
3
И снова Здравствуйте уважаемые форумчане.
Писал условие и столкнулся с трудностью: можно ли условие на нажатие клавиши мыши установить таймер тоесть:
"Если лкм зажата более 2сек тогда"
Примечание: и сработает ли IsPressed если клавиша мыши была зажата так: MouseDown("left")

В справке нашел только это:
Код:
#include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
    Sleep ( 250 )
    If _IsPressed("01", $dll) Then
        MsgBox(0,"_IsPressed", "End Key Pressed")
        ExitLoop
    EndIf
WEnd
DllClose($dll)
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Isn [?]
на нажатие клавиши мыши установить таймер
Код:
#include <Misc.au3>

$limit = 2000

$dll = DllOpen("user32.dll")

While 1
  If _IsPressed("01", $dll) Then
    $t = TimerInit()
    Do
      If TimerDiff($t) >= $limit Then
        ConsoleWrite("boom ")
        ExitLoop
      EndIf
    Until Not _IsPressed("01", $dll)
  EndIf
  Sleep(10)
WEnd

DllClose($dll)

сработает ли IsPressed если клавиша мыши была зажата так: MouseDown("left")
Сработает.
 

Oki

Продвинутый
Сообщения
452
Репутация
62

InnI

Я так понимаю, что последняя строчка это опечатка, так как она никогда не выполнится (разве что для памятки закомментировать её на случай редактирования, которое потенциально откроет к ней путь). Справка рекомендует закрывать библиотеку, несмотря на то, что её закрытие ожидается само по себе.
После окончания работы с dll, вызывайте функцию DllClose(), чтобы закрыть библиотеку. AutoIt обычно закрывает все файлы по окончании, но вызов DllClose() все же рекомендуется.
Насколько это критично? Следует ли позаботиться об остановке горячей клавишей вместо аварийного останова через трей или панель задач? Или это слишком несущественный момент, который позволительно проигнорировать, а заботиться о закрытии только тогда, когда это делается легко?
Сообщение автоматически объединено:

Впрочем, вспомнилось, что есть на этот случай довольно несложное решение.
Код:
OnAutoItExitRegister("_FinalActions")
While 1
    Sleep(100)
WEnd
Func _FinalActions()
    DllClose($hDll)
    MsgBox(4096, "", "Dll is closed.")
EndFunc
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
AutoIt, как интерпретатор, при завершении скрипта всё закрывает. Но, как программа, может содержать ошибки. Поэтому существуют подобные рекомендации. С другой стороны, при завершении процесса AutoIt, всё незакрытое будет закрыто самой Windows. Следовательно, критичность удаления объектов и закрытия дескрипторов определяется либо культурой написания кода, либо степенью параноидальности программиста.
 
  • Like
Реакции: Oki

Oki

Продвинутый
Сообщения
452
Репутация
62
Кстати, моё решение сработало только при закрытии из трея. При закрытии из панели задач функция всё-таки не запускается.
 
Верх