Что нового

Зажатие Гор. клавиши для старта функций

Ksaan

Знающий
Сообщения
207
Репутация
15
Лазил по форуму, инету но чтото не нашел такого. Интересно а можно с помощью
Код:
HotKeySet

а может и как по другому.....функция реагировала на нажатие(удержание) и отжатие клавиши??
Код:
HotKeySet ( "{нажатие}", "Down" )
HotKeySet ( "{отжатие}", "Up" )
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Ksaan

Код:
_IsPressed


Код:
Local $bDown = False, $bUp = True, $IsPressed
While 1 ;Main loop
	$IsPressed = _IsPressed( 0x01 )

	If $IsPressed And Not $bDown Then
		$bDown = True
		$bUp = False
		__OnDown()
	ElseIf Not $IsPressed And Not $bUp Then
		$bDown = False
		$bUp = True
		__OnUp()
	EndIf
WEnd


Или аналогичную проверку через
Код:
AdlibRegister
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Ksaan

В HotKey.au3 вроде бы есть реакция на "отжатие" клавиш:

http://autoit-script.ru/index.php/topic,296.0.html
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ksaan,
Можно примерно так сделать.
Код:
#include <Misc.au3>

Global $sHexKey = Random(31, 39, 1), $sChr = Chr('0x' & $sHexKey)
HotKeySet($sChr, '_MyFunc')
HotKeySet('{Esc}', '_Exit')
ToolTip('Key "' & $sChr & '" no press', 0, 0)
While 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _MyFunc()
	HotKeySet($sChr)
	ToolTip('Key "' & $sChr & '" is pressing now', 0, 0);действие при нажатии
	Do
		Sleep(10)
	Until Not _IsPressed($sHexKey)
	ToolTip('Key "' & $sChr & '" no press', 0, 0);действие при отпускании
	HotKeySet($sChr, '_MyFunc')
EndFunc   ;==>_MyFunc
 

Fever

Скриптер
Сообщения
308
Репутация
112
Или так: чем дольше держите ЛКМ, тебе быстрее заполняется

Код:
#include <Misc.au3>

Global _
	$fStep = 0.01, _
	$fCur = 0

AdlibRegister("_Set", 500)

GUICreate("Window", 500, 200, -1, -1)

$hProgress = GUICtrlCreateProgress(10, 75, 480, 20)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch

	If _IsPressed("01") Then
		$fStep = 0.01

		While _IsPressed("01")
			$fCur += $fStep

			$fStep += 0.05

			Sleep(50)
		WEnd
	EndIf
WEnd

Func _Set()
	GUICtrlSetData($hProgress, $fCur)
EndFunc
 
Автор
Ksaan

Ksaan

Знающий
Сообщения
207
Репутация
15
madmasles
Скажи а почему если я заменяют или убираю Random с цифр 1-9 и меняю их на 58(x) а именно эта клавиша мне и нужна, то скрипт перестает работать?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ksaan [?]
Скажи а почему если я заменяют или убираю Random с цифр 1-9 и меняю их на 58(x) а именно эта клавиша мне и нужна, то скрипт перестает работать?
Сам пытаюсь разобраться. Пока не понимаю, почему нет?


Добавлено:
Сообщение автоматически объединено:

Ksaan,
Так работает (Обход проблемы с HotKeySet/Accelerators при разных раскладках клавиатуры).
Код:
#include <Misc.au3>

_WinAPI_LoadKeyboardLayoutEx()

HotKeySet('x', '_MyFunc')
HotKeySet('{Esc}', '_Exit')
ToolTip('Wait for pressing "x"', 0, 0)
While 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func _MyFunc()
	HotKeySet('x')
	ToolTip('Key "x" is pressing now', 0, 0);действие при нажатии
	Do
		Sleep(10)
	Until Not _IsPressed('58')
	ToolTip('Key "x" no press', 0, 0);действие при отпускании
	HotKeySet('x', '_MyFunc')
EndFunc   ;==>_MyFunc

Func _WinAPI_LoadKeyboardLayoutEx($sLayoutID = 0x0409, $hWnd = 0)
    Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
    Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)

    If Not @error And $aRet[0] Then
        If $hWnd = 0 Then
            $hWnd = WinGetHandle(AutoItWinGetTitle())
        EndIf

        DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
        Return 1
    EndIf

    Return SetError(1)
EndFunc
 
Верх