amg_developer
February 16th, 2005, 04:16 PM
I've searched through the forums and found a lot of clues to my problem, but I'm still a bit in the dark about it. I need to screen keyboard input to determine if it is a valid sequence, or if it is a repeated entry. After doing some research, I decided that a system-wide hook may fit my needs. Here is an example of the specific problem I am trying to tackle:
Forklift drivers log onto their system (win xp tablet pc with an internet explorer based mainframe emulator) using a keyboard, then scan the loads they move. All of the input comes in through the keyboard, since the barcode scanner is spliced into the ps2 port. The problem is, if they are supposed to log on with '55555', and they enter '54556', the mainframe terminal lets them, and they don't get credit for doing any work until they log in correctly; or they may scan the same barcode twice in a row, creating a duplicate entry. I can't get to the mainframe app to add error checking and error messages, so I want to manipulate the input before it's posted to the terminal window, disregarding it and issuing an error message box so the forklift driver can enter the correct data.
I've done a lot of reading about hooks, and starting working on a low level keyboard hook (WH_KEYBOARD_LL) in a dll, and got it to work, although it doesn't do anything other than return success. I'm relatively new to winAPI programming, and I have read other posts about how advanced a topic this is, and I think I need a little bit of direction. Here is what I want to do:
Hold the data in some type of field (array, etc), and check it against a list of valid data. I suppose I could do this by checking the keydown event for vk_return, but then how would I erase the bad data from the terminal window? Can I hold all the data somewhere until enter is pressed, check it, then dump it or let it pass to the active window? I've read several articles and forum posts here, but most of them have to do with trapping single keys. If there is a better way to accomplish this than a system wide hook, that's ok, since I'm trying to solve a problem more than learn a new technique. Any advice or thoughts would be helpful. Just ask if any further clarification is required. Thanks!
Forklift drivers log onto their system (win xp tablet pc with an internet explorer based mainframe emulator) using a keyboard, then scan the loads they move. All of the input comes in through the keyboard, since the barcode scanner is spliced into the ps2 port. The problem is, if they are supposed to log on with '55555', and they enter '54556', the mainframe terminal lets them, and they don't get credit for doing any work until they log in correctly; or they may scan the same barcode twice in a row, creating a duplicate entry. I can't get to the mainframe app to add error checking and error messages, so I want to manipulate the input before it's posted to the terminal window, disregarding it and issuing an error message box so the forklift driver can enter the correct data.
I've done a lot of reading about hooks, and starting working on a low level keyboard hook (WH_KEYBOARD_LL) in a dll, and got it to work, although it doesn't do anything other than return success. I'm relatively new to winAPI programming, and I have read other posts about how advanced a topic this is, and I think I need a little bit of direction. Here is what I want to do:
Hold the data in some type of field (array, etc), and check it against a list of valid data. I suppose I could do this by checking the keydown event for vk_return, but then how would I erase the bad data from the terminal window? Can I hold all the data somewhere until enter is pressed, check it, then dump it or let it pass to the active window? I've read several articles and forum posts here, but most of them have to do with trapping single keys. If there is a better way to accomplish this than a system wide hook, that's ok, since I'm trying to solve a problem more than learn a new technique. Any advice or thoughts would be helpful. Just ask if any further clarification is required. Thanks!