How to get back the focus to my application automatically
I am setting up a simple 'boot menu' for my app, where the (experienced) user can check or uncheck various run options. The boot menu is a simple borderless form shown modally and with
- Quit button
- Continue button, as well as
- boot options checkboxes
I display this boot option dialog as I am starting my app if the user is holding the F8 key - I've discovered that Windows does not use F8, so you can actually hold down F8 while clicking on a shortcut to my exe and my boot dialog opens. Herein lies the probem.
My form does not become the active application - rather the Explorer window hosting the shortcut that I clicked on does. If I click on my form (boot dialog) it gets the focus. How can I make my boot dialog form 'pull' Wi开发者_Python百科ndows into focusing it?
In general you cannot take focus. From Raymond Chen's Old New Thing blog:
- Foreground activation permission is like love: You can't steal it, it has to be given to you
...the window manager sees no reason for the first instance to have any right to take the foreground. There is no evidence that the first instance is coming to the foreground in response to some user action.
There are a variety of ways of addressing this problem. The easiest way is simply to...
- You don't need to steal focus if you can just arrange for someone to give it to you
...outright stealing the focus is the wrong thing to do...
...Just because there's no good way to do something doesn't mean that you are automatically permitted to do it in a bad way.
The problem is that the user has been giving input to a program that is not yours. You're not entitled to have focus just cause you want it.
It may not be the answer you want, but it is the answer. And Microsoft has been working hard to thwart programs that try to steal focus. Any solution you come up with is breaking the rules, and might not work at any point in the future.
...Just because there's no good way to do something doesn't mean that you are automatically permitted to do it in a bad way.
精彩评论