STORE ADLLS(dllArray) TO lnNumDLLs IF ASCAN(dllArray,"GetActiveWindow") = 0 DECLARE INTEGER GetActiveWindow IN User32 INTEGER ENDIF IF ASCAN(dllArray,"SetForegroundWindow") = 0 DECLARE INTEGER SetForegroundWindow IN User32 INTEGER ENDIF *--Get the current calling program's window IF TYPE('gnMainFoxWin') <> "N" .or. gnMainFoxWin = 0 gnMainFoxWin=GetActiveWindow() ENDIF *--Run your prg that shifts focus *--Note you might need a doevents after or a method of waiting for the focus *--to shift so you can bring it back (don't call setforegroundwindow too *--soon) *--Experiment with a DOEVENTS FORCE force here if you run into problems *--but try it first without it *--Bring focus back to the calling program IF TYPE('gnFoxMainWin') = "N" AND gnFoxMainWin <> 0 =SetForegroundWindow(gnMainFoxWin) ENDIF DOEVENTS FORCE>I have created many PRGS that have no interface and do not appear on taskbar nor show up on the normal desktop screen. I've accomplished this by adding the SCREEN=OFF statement to the config.fpw file. Also, I have found that I can include some occasional "WAIT WINDOW" statements in the program and only "wait window messages" appears on my desktop in the upper right corner of the screen. These messages go away after the TIMEOUT expires. This works really great, as it lets me know that the program is still running and I can tell from the messages where the program is, as it works though its tasks.