-
October 22nd, 2007, 06:22 AM
#1
Injecting keyboard scan codes at driver level
I am writing a program for a friend who has difficulty using the keyboard. I
would like to create a program that injects scan codes directly into the
keyboard data stream to simulate an actual key press. There are certain
programs he has installed that read the raw keyboard data so the simple Post
Message and Send Input solutions do not work. I must somehow simulate key
presses at the lowest level so that they appear as raw data.
Hardware:
The operating system is XP using a PS/2 keyboard. There is a high
probability that he will upgrade to a USB keyboard and Vista but probably not
at the same time. The program must therefore be compatible with both OS and
both port types.
Ideas:
I have 2 ideas. The first is to create a virtual keyboard in device manager
that Windows sees as a real keyboard. My user program will tell this virtual
keyboard what keys are pressed/released and the device will be read by
Windows/programs as normal. I have found no information on how to do this
so...
My second idea is to create a keyboard filter driver which would append the
scan codes to the keyboard data stream based on data received from the user
program.
How far I have got:
I have no experience with drivers and I’m eager to learn. I have determined
that:
- The driver must be an upper level keyboard class filter driver (simple
registry installation)
- The driver does not need to handle (dis)connection, power or LEDs. It only
injects scan codes
- The driver does not block, read or modify any real keyboard activity – it
lets it all through
- The user program simply sends scan codes to the driver – there is no other
communication (although some result value to let the program know that the
driver responded would be useful)
I have hit a brick wall as I do not know where to begin! I have successfully
built a scan code modifying kbfiltr from the DDK but this is PS/2 lower
level, has complex unnecessary code and has no injection sample code.
Ctrl2Cap sounds interesting but there is no source code available now and the
author states that injection will be difficult to achieve.
While I am fluent in C and programming in general, I understand that this
program will require non-user mode programming and I have zero experience in
this area. This program has a very simple, specific, unobtrusive function but
I’m finding it hard to know where to start. Any advice, links or samples to
help me achieve this goal would be fantastic. Thank you.
- Mark Andrews
-
November 20th, 2014, 03:00 AM
#2
Re: Injecting keyboard scan codes at driver level
Hi,
Do you already have a solution for your problem?
/Zwilk
-
November 20th, 2014, 07:58 AM
#3
Re: Injecting keyboard scan codes at driver level
Assuming you have the issue too (even though you should have created a new post instead of resurrecting ancient ones).
See MSDN for SendInput().
-
November 21st, 2014, 03:50 AM
#4
Re: Injecting keyboard scan codes at driver level
Thank you for the helpfull reply. I was trying to shut a computer down using send codes sending from a Teensy. But I will start a new topic for this.
/Zwilk
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|