Use file association to start an applicationTag(s): WinAPI/Registry
Use the external function ShellExecuteA(). The function declaration is :
FUNCTION long ShellExecuteA & (long hwnd, string lpOperation, & string lpFile, string lpParameters, string lpDirectory, & integer nShowCmd ) LIBRARY "shell32"
From your script, for example, to start the default browser :
string ls_Null long ll_rc SetNull(ls_Null) ll_rc = ShellExecuteA & ( handle( this ), "open", "mypahe.html", ls_Null, ls_Null, 1)
SE_ERR_FNF 2 // file not found SE_ERR_PNF 3 // path not found SE_ERR_ACCESSDENIED 5 // access denied SE_ERR_OOM 8 // out of memory SE_ERR_DLLNOTFOUND 32 SE_ERR_SHARE 26 SE_ERR_ASSOCINCOMPLETE 27 SE_ERR_DDETIMEOUT 28 SE_ERR_DDEFAIL 29 SE_ERR_DDEBUSY 30 SE_ERR_NOASSOC 31
[structure nvos_shellexecuteinfo] long cbSize long fMask long hwnd string lpVerb string lpFile string lpParameters string lpDirectory long nShow long hInstApp long lpIDList string lpClass long hkeyClass long dwHotKey long hIcon long hProcess [External Function] FUNCTION long ShellExecuteEx(REF nvos_shellexecuteinfo lpExecInfo) LIBRARY "shell32.dll" ALIAS FOR ShellExecuteExA [powerscript] function boolean of_execute (readonly string as_file, readonly string as_extension) CONSTANT long SEE_MASK_CLASSNAME = 1 CONSTANT long SW_NORMAL = 1 string ls_class long ll_ret nvos_shellexecuteinfo lnvos_shellexecuteinfo Inet l_Inet IF lower(as_extension) = "htm" OR lower(as_extension) = "html" THEN // Open html file with HyperlinkToURL // So, a new browser is launched // (with the code using ShellExecuteEx, it is not sure) GetContextService("Internet", l_Inet) ll_ret = l_Inet.HyperlinkToURL(as_file) IF ll_ret = 1 THEN RETURN true END IF RETURN false END IF // Search for the classname associated with extension RegistryGet("HKEY_CLASSES_ROOT\." + as_extension, "", ls_class) IF isNull(ls_class) OR trim(ls_class) = "" THEN // The class is not found, try with .txt (why not ?) RegistryGet("HKEY_CLASSES_ROOT\.txt", "", ls_class) END IF IF isNull(ls_class) OR Trim(ls_class) = "" THEN // No class : error RETURN false END IF lnvos_shellexecuteinfo.cbsize = 60 lnvos_shellexecuteinfo.fMask = SEE_MASK_CLASSNAME // Use classname lnvos_shellexecuteinfo.hwnd = 0 lnvos_shellexecuteinfo.lpVerb = "open" lnvos_shellexecuteinfo.lpfile = as_file lnvos_shellexecuteinfo.lpClass = ls_class lnvos_shellexecuteinfo.nShow = SW_NORMAL ll_ret = ShellExecuteEx(lnvos_shellexecuteinfo) IF ll_ret = 0 THEN // Error RETURN false END IF RETURN true
Then in Powerbuilder
// Open c:\test.txt with Word or Wordpad of_execute("c:\test.txt", "doc") // Open c:\test.txt with the default browser of_execute("c:\test.txt", "htm")
Thanks to jc smondack for this tip.