Что нового

Регистрация WM_KEYDOWN сообщения

Cytrus

Новичок
Сообщения
110
Репутация
3
Привет.
Чё-то у меня не получается зарегистрировать функцию.
Если в Gui присутствуют какие-то элементы, то функция перестаёт работать.


Код:
#Include <APIConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <WinAPIEx.au3>

GUICreate('MyGUI')
; Local $a1 = GUICtrlCreateLabel("AAAAAAAA", 20, 5, 50, 20)
; Local $a2 = GUICtrlCreateButton('Close', 80, 40, 80, 25, 0x0)
GUIRegisterMsg($WM_KEYDOWN, 'WM_KEYDOWN')
GUISetState()

Do
Until GUIGetMsg() = -3

Func WM_KEYDOWN($hWnd, $iMsg, $wParam, $lParam)
MsgBox(0, '', $lParam & @CR)
ConsoleWrite($lParam & @CR)
; 	Return $GUI_RUNDEFMSG
Return
EndFunc
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Некоторые элементы управления поглощают внутренние специфические коды сообщений Windows, поэтому их регистрация не будет иметь эффекта, например: WM_CHAR, WM_KEYDOWN, WM_KEYUP поглощаются элементами Edit.
можно так(пример из справки)
Код:
#include <APIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WinAPIEx.au3>

Global $hHook, $hStub_KeyProc, $buffer = ""

OnAutoItExitRegister("Cleanup")


$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
Local $hmod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)


GUICreate('MyGUI')
Local $a1 = GUICtrlCreateLabel("AAAAAAAA", 20, 5, 50, 20)
Local $a2 = GUICtrlCreateButton('Close', 80, 40, 80, 25, 0x0)

GUISetState()

Do
Until GUIGetMsg() = -3

Func _KeyProc($nCode, $wParam, $lParam)
	Local $tKEYHOOKS, $vkc
	$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
	If $nCode < 0 Then
		Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
	EndIf
	If $wParam = $WM_KEYDOWN Then
		$vkc = DllStructGetData($tKEYHOOKS, "vkCode")
		ConsoleWrite( $vkc & ' - ' & Chr($vkc) & @LF)
	EndIf
	Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc   ;==>_KeyProc

Func Cleanup()
	_WinAPI_UnhookWindowsHookEx($hHook)
	DllCallbackFree($hStub_KeyProc)
EndFunc   ;==>Cleanup
 
Автор
Cytrus

Cytrus

Новичок
Сообщения
110
Репутация
3
Спасибо.

А я думаю, что такое? Лабел поглощает, кнопка.
 
Верх