防止winapi累积按下的键
我正在用汇编语言编写一个WinApi,程序会对按键做出反应,问题是,如果例程没有完成,同时再次按下该键,它就会开始累积,这意味着一旦例程完成,它就会根据用户在例程进行时按下该键的次数反复运行。 经典消息循环:防止winapi累积按下的键,winapi,assembly,Winapi,Assembly,我正在用汇编语言编写一个WinApi,程序会对按键做出反应,问题是,如果例程没有完成,同时再次按下该键,它就会开始累积,这意味着一旦例程完成,它就会根据用户在例程进行时按下该键的次数反复运行。 经典消息循环: .MessageLoop: invoke PeekMessage,Message,NULL,0,0,PM_REMOVE test eax,eax jz near .NoMess
.MessageLoop:
invoke PeekMessage,Message,NULL,0,0,PM_REMOVE
test eax,eax
jz near .NoMess
cmp dword [Message + MSG.message],WM_QUIT
jz near .Finish
invoke TranslateMessage,Message
invoke DispatchMessage,Message
.NoMess:
; some code
jmp .MessageLoop
和消息句柄:
function WndProc,hWnd,wMsg,wParam,lParam
begin
mov eax,dword [wMsg]
cmp eax,WM_DESTROY
je near .Destroy
cmp eax,WM_CLOSE
je near .Destroy
cmp eax, WM_KEYDOWN
je near .keyDown ; when key is pressed, then it is checked what key it is, meanwhile I need program to ignore all keypressed
cmp eax, WM_PAINT
je near .Paint
invoke DefWindowProc,[hWnd],[wMsg],[wParam],[lParam]
return eax
假设我有一个例程来处理
W
按钮,在这个例程的过程中,我希望所有其他W
键都被忽略。为什么不添加一个例程,在操作结束时或从操作返回时丢弃任何未处理的按键事件呢?@WeatherVane的问题是,如何识别处理程序尚未完全处理,当另一个按键出现时。呃。。。六英寸的钉子,设置一个标志?如果你给我看一个人,可以按下键比执行代码< > WMYKEYDOWN < /COD>消息处理程序在ASM中的执行时间快,我可能会认为这是一个实际问题。就所有实际目的而言,这不是一个问题。更糟糕的是,这是一种反模式。如果用户按两次键,我会认为他们是想按两次键。@WeatherVane可能是解决方案