Reputation:
I'm trying to help a disabled person with a small bit of code to help him play a game easier. He is limited to a trackball and a single button.
Currently he uses the onscreen keyboard and has managed to play other games using it. I've created a small bit of code to try and make his live easier. It uses hover buttons for the keys. When the mouse pointer enters the button it sends key down, when it moves off the button it sends key up.
I have that working and I think (or hope) he's going to like it. It worked pretty well when I tested it.
I want to add one more piece of functionality to it. If he clicks while over my control, I want to send a different key stroke. Not a problem, I can do that. However, when I do that window focus shifts from the game to my control.
I found this on MSDN:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/48737c2b-7e6f-4ade-ac1c-7dd2f5cc2b88/
That works to prevent my window from activating, but it still causes the game to lose focus. I can set the focus back to the game, but I would prefer if it just never lost focus.
I'm coding in C# and WPF.
Anyone have any ideas on how you might do that?
John Fenton
Upvotes: 15
Views: 6428
Reputation: 231
You could try canceling the event PreviewLostKeyboardFocus as mention in this blog:
http://immortalratblog.blogspot.com/2008/03/canceling-keyboard-focus-change-in-wpf.html
Im guessing that focus is lost be simulating the key press?
Upvotes: 1
Reputation: 5670
Hook in some low level mouse and keyboard hooks, and your application won't need to steal focus and give it back.
Take a look at this pastie of a simple WPF app, which is heavily based off of an article by Stephen Toub.
Whenever you left click, anywhere, a second left click is sent, so you effectively double click. You could achieve your goal by hiding your app whenever the user clicks, so that your app never steals focus. Then detect the location of the click, and decide if one of your buttons would have been pressed, and act accordingly.
I realize I'm digging this out of the past, but hopefully someone will find this answer helpful. Cheers, and good for you for turning your programming to assist a fellow human!
Upvotes: 3