Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Loosing focus when running another exe
Message
From
11/04/2014 10:24:48
 
 
To
11/04/2014 09:16:43
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows Server 2012
Network:
Windows 2003 Server
Database:
MySQL
Application:
Desktop
Miscellaneous
Thread ID:
01598480
Message ID:
01598495
Views:
34
>>>>From my VFP application I am running another executable using ! /N7 xyz.exe. The executable is a background process without a window, but when running the executable it results in losing the focus of the VFP application. So the user must click on the form again to continue working. I try to set the focus to a textbox on the form, but the application itself does not have focus anymore.
>>>>The best would be if the focus would not go away in the first place, but I tried different ways and could not succeed. Any ideas?
>>>
>>>
*ShellX.prg:
>>>*To use:
>>>*
>>>*lcProg = 'Yourpath\yourprog.exe'
>>>*lcPar = 'some parameters' && Drop this line if no parameters
>>>*ShellX(lcProg, lcPar)
>>>Lparameters tcURL, tcParameter
>>>if empty(tcParameter)
>>>   tcParameter = ''
>>>Endif
>>>#define SW_HIDE 0
>>>#DEFINE SW_SHOWNORMAL 1
>>>#DEFINE SW_SHOWMINIMIZED 2
>>>#DEFINE SW_SHOWMAXIMIZED 3
>>>*!*   Legal verbs: open, edit, print, find, explore, NULL
>>>DECLARE INTEGER ShellExecute IN shell32.dll ; 
>>>   INTEGER hndWin, STRING cAction, STRING cFileName, ; 
>>>   STRING cParams, STRING cDir, INTEGER nShowWin
>>>ShellExecute( 0, "open", tcURL, tcParameter , "", SW_SHOWNORMAL )
>>
>>Thanks, I am now using ShellExecute, but the focus issue remains the same. I tested with another executable to be sure (Notepad.exe) and then it does work properly, so I think the culprit is the executable that I run, which is another small VFP executable. This executable has Screen=OFF in the config.fpw and _SCREEN.Visible = .F. in the INIT of main.prg. So even with these settings, and running the exe with SW_SHOWHIDE it takes away the focus from the calling program and sets the focus to the next running window (because it cannot set the focus to itself I assume). I wonder if there is another setting I overlook.
>
>As far as I remember, there is an API call you can use to set focus to whatever program you want, maybe you can use it to set focus back to the caller?

Yes, this is what I did as a workaround, although you see it flash for a millisecond. So I also set the form to be always on foreground. Problem solved, but still wondering why that happens.
Christian Isberner
Software Consultant
Previous
Reply
Map
View

Click here to load this message in the networking platform