#DEFINE MAX_PATH 260
#DEFINE OSK_EXE "osk.exe"
DO declare
= ShellExecute(0, "open", GetOskPath(), "", "", 1)
* end of main
FUNCTION GetOskPath() As String
LOCAL cPath
cPath = PathCombine(;
GETENV("windir"),;
"sysnative",;
OSK_EXE )
IF FILE(cPath)
RETURN m.cPath
ENDIF
cPath = PathCombine(;
GetSysDir(),;
OSK_EXE )
RETURN IIF(FILE(cPath), m.cPath, OSK_EXE)
FUNCTION GetSysDir
LOCAL cBuffer, nBufsize
cBuffer=REPLICATE(CHR(0), MAX_PATH)
nBufsize= GetSystemDirectory(@cBuffer, LEN(cBuffer))
RETURN SUBSTR(cBuffer, 1, nBufsize)
FUNCTION PathCombine(p1, p2, p3, p4, p5) As String
LOCAL cBuffer, cPath1, cPath2, nIndex, nCount
nCount = PCOUNT()
DO CASE
CASE nCount = 0
RETURN ""
CASE nCount = 1
RETURN p1
ENDCASE
cBuffer = m.p1
FOR nIndex=2 TO nCount
cPath1 = STRTRAN(m.cBuffer, CHR(0), "")
cPath2 = EVALUATE("m.p" + TRANSFORM(m.nIndex))
cBuffer = REPLICATE(CHR(0), MAX_PATH)
PathCombineApi(@cBuffer, cPath1, cPath2)
NEXT
RETURN STRTRAN(m.cBuffer, CHR(0), "")
PROCEDURE declare
DECLARE INTEGER GetSystemDirectory IN kernel32;
STRING @lpBuffer, INTEGER nSize
DECLARE INTEGER ShellExecute IN shell32;
INTEGER hWindow, STRING lpOperation,;
STRING lpFile, STRING lpParameters,;
STRING lpDirectory, INTEGER nShowCmd
DECLARE INTEGER PathCombine IN shlwapi;
AS PathCombineApi;
STRING @lpszDest, STRING lpszDir,;
STRING lpszFile
|