Trouble with VB6 app, bringing a dialog to front and focus on Windows 7
activex, com, vb6, windows-7
Solution
Applications can't (without lying to Windows) steal focus. The calling app should really call `AllowSetForegroundWindow()` (if it's available on win16) to allow the COM process to steal the focus, or call `SetForegroundWindow()` itself.
See the help for `SetForegroundWindow()` for the conditions on setting focus.
Problem
I have a small utility app written in Visual Basic 6 that has been happily running on XP clients for many years until recently a client who is using Windows 7 has notified and shown me that the behaviour is different. When my VB app displays the dialog, it remains hidden until the user clicks on it in the taskbar. I changed the code so rather than using a ".show vbModal" command, I changed to displaying the form with non-modally, and then added various API calls like BringWindowToFront and SetWindowPos to make it top most AND calling .focus on the form, despite these extra instructions the best result I can achieve is to make the form flash prompting the user to click on it. No matter what I've tried I cannot make the window display topmost, and with focus, without user intervention. Note. this is an ActiveX exe project and is being called by a Win16 app through COM. Has anyone else encountered this behaviour and know of a solution? Any suggestions/advice appreciated, thanks.