News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Keyboard led's *keybd_event function*

Started by gavin, September 21, 2005, 02:51:43 PM

Previous topic - Next topic

gavin


My code below lights up the capslock key .
But i have to press it physchically 2 times to turn it off.
Any idea's why this happens?
Because of this i'm not sure how to make it flash on and off using a loop.
Thanks lads.


.data
     
.code

start:
     mov ecx,14h                        ; virtual keycode for CAPSLOCK
     invoke keybd_event,              ;The keybd_event function synthesizes a keystroke.
     ecx,                             ;the key
     NULL,                            ;KEYEVENTF_EXTENDEDKEY not used     
     NULL,                            ;If specified, the key is being released. If not specified,it's being depressed.       
     NULL                             ;additional value associated with the key stroke
     
     invoke ExitProcess,NULL          ;return to windows

end start

Tedd

I would guess that it only turns on the led (it doesn't modify the caps state.)
So, the code turns the led on. Then you press caps-lock, which sets caps state and turns the led on (but the led is already on - no visible change.) Then on the second press, caps state is off and the led is turned off.

So I would assume you need to also set caps mode. How you actually do that is another question :bg
The first place I would look is to send a key event (for caps lock being pressed) to the system.


As for making a funky flashy-led thing, you'll need to switch it on, delay for a short time (hint: Sleep) and then turn it off again.
No snowflake in an avalanche feels responsible.

MichaelW

The code modifies the caps lock state as well as the LED state, but it's only synthesizing the key-press event. If the function were called a second time with KEYEVENTF_KEYUP in the dwFlags argument then the Caps Lock key would toggle the state on the first press.

eschew obfuscation

gavin

Ah right.

Thanks for your help lads it's working like a charm.
I'm going to try get this going to music.


start:
     
     invoke keybd_event,
     14h,
     NULL,
     0,
     NULL


     invoke Sleep,100


     invoke keybd_event,
     14h,
     NULL,
     KEYEVENTF_KEYUP,
     NULL

jmp start


:U