Что нового

Вызов функции при нажатии клавиши

Vini

Новичок
Сообщения
27
Репутация
0
Всем доброго времени суток!
Имеется GUI с полем Input. Что надо сделать, чтобы при нажатии на клавиатуре клавиши (Enter или комбинации клавиш) и при нахождении курсора в поле Input выполнялось какое-то действие (функция)? Если курсора в поле нет, то и действие не должно выполняться при нажатии.
 

CreatoR

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

$hGUI = GUICreate("Input trigger by HotKey", 300, 200)

$iInput = GUICtrlCreateInput("", 20, 40, 100, 20)
$iButton = GUICtrlCreateButton("Button", 20, 80, 60, 20)
$iCheckbox = GUICtrlCreateCheckbox("Checkbox", 20, 120)

$iDummy = GUICtrlCreateDummy()
Dim $aAccelKeys[1][2] = [["{ENTER}", $iDummy]]
GUISetAccelerators($aAccelKeys)

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $iDummy
			If GUICtrlGetHandle($iInput) = ControlGetHandle($hGUI, '', ControlGetFocus($hGUI)) Then
				MsgBox(64, 'Title', 'Input Action', 0, $hGUI)
			EndIf
	EndSwitch
WEnd
 

madmasles

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

Global $hGui, $nInput1, $nInput2

$hGui = GUICreate('UberGUI', 200, 150)
$nInput1 = GUICtrlCreateInput('first', 20, 35, 125, 20)
$nInput2 = GUICtrlCreateInput('second', 20, 65, 125, 20)
$nButton = GUICtrlCreateButton('Button', 20, 90, 50, 25)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			MsgBox(64, 'Info', GUICtrlRead($nInput1) & @LF & GUICtrlRead($nInput2), 0, $hGui)
	EndSwitch
WEnd

Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
	Local $nNotifyCode, $nID
	$nNotifyCode = BitShift($iwParam, 16)
	$nID = BitAND($iwParam, 0xFFFF)
	;Switch $hWnd
		;Case $hGui
			Switch $nNotifyCode
				Case $EN_SETFOCUS
					Switch $nID
						Case $nInput1
							HotKeySet('1', '_MyFunc_1');1
						Case $nInput2
							HotKeySet('2', '_MyFunc_2');2
					EndSwitch
				Case $EN_KILLFOCUS
					Switch $nID
						Case $nInput1
							HotKeySet('1')
						Case $nInput2
							HotKeySet('2')
					EndSwitch
			EndSwitch
	;EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND

Func _MyFunc_1()
	MsgBox(64, 'Info', '_MyFunc_1' & @LF & GUICtrlRead($nInput1), 0, $hGui)
EndFunc   ;==>_MyFunc_1

Func _MyFunc_2()
	MsgBox(64, 'Info', '_MyFunc_2' & @LF & GUICtrlRead($nInput2), 0, $hGui)
EndFunc   ;==>_MyFunc_2
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
Сложновато для такой простой задачи
Согласен. Просто у меня был очень похожий пример и я его чуть-чуть поправил. :smile:
 
Верх