Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble with VB6 app, bringing a dialog to front and focus on Windows 7

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.

like image 846
David Brown Avatar asked May 31 '12 10:05

David Brown


1 Answers

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.

like image 115
Deanna Avatar answered Sep 25 '22 13:09

Deanna