Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
PARAMETERS p1, p2, p3, p4, p5
LOCAL laApp, lnHandle, lnCount, lcTitle, lnI, lnHFox
STORE '' TO cParms
IF PCOUNT() > 0
FOR zzz = 1 TO PCOUNT()
STORE 'p' + ALLTRIM(STR(zzz)) TO cparmx
cParms = cParms + "'" + EVALUATE(cparmx) + "' "
NEXT
ENDIF
DIMENSION laApp[1]
lnHFox=0
#DEFINE SW_HIDE 0
#DEFINE SW_SHOWNORMAL 1
#DEFINE SW_NORMAL 1
#DEFINE SW_SHOWMINIMIZED 2
#DEFINE SW_SHOWMAXIMIZED 3
#DEFINE SW_MAXIMIZE 3
#DEFINE SW_SHOWNOACTIVATE 4
#DEFINE SW_SHOW 5
#DEFINE SW_MINIMIZE 6
#DEFINE SW_SHOWMINNOACTIVE 7
#DEFINE SW_SHOWNA 8
#DEFINE SW_RESTORE 9
#DEFINE SW_SHOWDEFAULT 10
#DEFINE SW_FORCEMINIMIZE 11
#DEFINE SW_MAX 11
DECLARE INTEGER FindWindow ;
IN win32api ;
INTEGER nullpointer, ;
STRING cwindow_name
DECLARE INTEGER GetWindow ;
IN win32api ;
INTEGER ncurr_window_handle, ;
INTEGER ndirection
DECLARE INTEGER GetWindowText ;
IN win32api ;
INTEGER n_win_handle, ;
STRING @ cwindow_title, ;
INTEGER ntitle_length
DECLARE LONG BringWindowToTop IN Win32API LONG
DECLARE INTEGER GetCurrentThreadId;
IN kernel32
DECLARE INTEGER GetWindowThreadProcessId IN user32;
INTEGER HWND,;
INTEGER @ lpdwProcId
DECLARE INTEGER GetCurrentThreadId;
IN kernel32
DECLARE INTEGER AttachThreadInput IN user32 ;
INTEGER idAttach, ;
INTEGER idAttachTo, ;
INTEGER fAttach
DECLARE INTEGER GetForegroundWindow IN user32
DECLARE Long ShowWindow In Win32API Long, Long
DECLARE INTEGER ShellExecute IN shell32.DLL ;
INTEGER hndWin, ;
STRING cAction, ;
STRING cFileName, ;
STRING cParams, ;
STRING cDir, ;
INTEGER nShowWin
STORE .F. TO lFoundIt
lnHFox = FindWindow(0,_SCREEN.CAPTION)
lnHandle = lnHFox && GetWindow(lnHFox,0)
lnCount = 0
DO WHILE lnHandle > 0
lcTitle=SPACE(255)
lnI=GetWindowText(lnHandle, @lcTitle,LEN(lcTitle))
IF lnI>0
lcTitle=STRTRAN(TRIM(lcTitle),CHR(0),"")
ELSE
lcTitle=""
ENDIF
IF lnHandle > 0 .AND. !EMPTY(lcTitle)
IF 'YourAppName' $ lcTitle
STORE lnHandle TO nYourAppHandle
lFoundIt = .T.
ENDIF
ENDIF
lnHandle = GetWindow(lnHandle,2)
ENDDO
IF lFoundIt
=ForceHide(nYourAppHandle)
ENDIF
RETURN
FUNCTION ForceHide(lnHWND)
LOCAL nForeThread, nAppThread
nForeThread = GetWindowThreadProcessId(GetForegroundWindow(), 0)
nAppThread = GetCurrentThreadId()
IF nForeThread != nAppThread
AttachThreadInput(nForeThread, nAppThread, .T.)
BringWindowToTop(lnHWND)
SHOWWINDOW(lnHWND, SW_SHOWMINIMIZED)
AttachThreadInput(nForeThread, nAppThread, .F.)
ELSE
BringWindowToTop(lnHWND)
SHOWWINDOW(lnHWND, SW_SHOWMINIMIZED)
ENDIF
ENDFUNC
oWSH = CREATEOBJECT("wscript.shell")
oWSH.Run("MyApp.EXE", 0)