$PBExportHeader$n_appobject.sru forward global type n_appobject from nonvisualobject end type end forward global type n_appobject from nonvisualobject autoinstantiate end type type prototypes Function boolean ShowWindow ( & longptr hWnd, & long nCmdShow & ) Library "user32.dll" Function longptr MonitorFromWindow ( & longptr hwnd, & ulong dwFlags & ) Library "user32.dll" Function ulong GetModuleFileName ( & longptr hModule, & ref string lpFileName, & ulong nSize & ) Library "kernel32.dll" Alias For "GetModuleFileNameW" Function boolean IsUserAnAdmin ( & ) Library "shell32.dll" Function long SHGetFolderPath ( & longptr hwnd, & long csidl, & longptr hToken, & ulong dwFlags, & Ref string pszPath & ) Library "shell32.dll" Alias For "SHGetFolderPathW" Subroutine SHChangeNotify ( & long wEventId, & ulong uFlags, & long dwItem1, & long dwItem2 & ) Library "shell32.dll" Alias For "SHChangeNotify" end prototypes type variables String REGISTRYKEY = "HKEY_CURRENT_USER\Software\Topwiz\PSRViewer" end variables forward prototypes public subroutine of_showwindow (window aw_window, windowstate ae_state) public function string of_getreg (string as_subkey, string as_valuename, string as_default) public function string of_getreg (string as_valuename, string as_default) public subroutine of_setreg (string as_subkey, string as_valuename, string as_value) public subroutine of_setreg (string as_valuename, string as_value) public subroutine of_delregkey (string as_subkey) public function boolean of_isonmonitor (window aw_window) public function long of_parse (string as_text, string as_sep, ref string as_array[]) public function string of_replaceall (string as_oldstring, string as_findstr, string as_replace) public function string of_getexefilename () public subroutine of_registerpsr () public function string of_getfolderpath (string as_folder) end prototypes public subroutine of_showwindow (window aw_window, windowstate ae_state);// this function sets the windowstate Long ll_cmdshow Longptr ll_hWnd ll_hWnd = Handle(aw_window) CHOOSE CASE ae_state CASE Maximized! ll_cmdshow = 3 CASE Minimized! ll_cmdshow = 2 CASE Normal! ll_cmdshow = 1 END CHOOSE ShowWindow(ll_hWnd, ll_cmdshow) aw_window.SetFocus() end subroutine public function string of_getreg (string as_subkey, string as_valuename, string as_default);// ----------------------------------------------------------------------------- // SCRIPT: of_GetReg // // PURPOSE: This function returns a string value from the registry. // // ARGUMENTS: as_subkey - Optional subkey under the base key // as_valuename - Name of the value // as_default - Default to return if not found // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/13/2006 RolandS Initial Coding // ----------------------------------------------------------------------------- String ls_regkey, ls_value If as_subkey = "" Then ls_regkey = REGISTRYKEY Else ls_regkey = REGISTRYKEY + "\" + as_subkey End If RegistryGet(ls_regkey, as_valuename, RegString!, ls_value) If IsNull(ls_value) Or ls_value = "" Then Return as_default Else Return ls_value End If end function public function string of_getreg (string as_valuename, string as_default);// ----------------------------------------------------------------------------- // SCRIPT: of_GetReg // // PURPOSE: This function returns a string value from the registry. // // ARGUMENTS: as_valuename - Name of the value // as_default - Default to return if not found // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/13/2006 RolandS Initial Coding // ----------------------------------------------------------------------------- Return of_GetReg("", as_valuename, as_default) end function public subroutine of_setreg (string as_subkey, string as_valuename, string as_value);// ----------------------------------------------------------------------------- // SCRIPT: of_SetReg // // PURPOSE: This function saves string values in the registry. // // ARGUMENTS: as_subkey - Optional subkey under the base key // as_valuename - Name of the value // as_value - The value to save // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/13/2006 RolandS Initial Coding // ----------------------------------------------------------------------------- String ls_regkey, ls_value If as_subkey = "" Then ls_regkey = REGISTRYKEY Else ls_regkey = REGISTRYKEY + "\" + as_subkey End If RegistrySet(ls_regkey, as_valuename, RegString!, as_value) end subroutine public subroutine of_setreg (string as_valuename, string as_value);// ----------------------------------------------------------------------------- // SCRIPT: of_SetReg // // PURPOSE: This function saves string values in the registry. // // ARGUMENTS: as_valuename - Name of the value // as_value - The value to save // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/13/2006 RolandS Initial Coding // ----------------------------------------------------------------------------- of_SetReg("", as_valuename, as_value) end subroutine public subroutine of_delregkey (string as_subkey);// ----------------------------------------------------------------------------- // SCRIPT: of_DelRegKey // // PURPOSE: This function deletes a subkey from the registry. // // ARGUMENTS: as_subkey - Optional subkey under the base key // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 08/28/2016 RolandS Initial Coding // ----------------------------------------------------------------------------- String ls_regkey If as_subkey = "" Then ls_regkey = REGISTRYKEY Else ls_regkey = REGISTRYKEY + "\" + as_subkey End If RegistryDelete(ls_regkey, "") end subroutine public function boolean of_isonmonitor (window aw_window);// ----------------------------------------------------------------------------- // SCRIPT: of_IsOnMonitor // // PURPOSE: This function determines if the window is currently visible // on one of the monitors. // // ARGUMENTS: aw_window - Window to check the location // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 05/10/2019 RolandS Initial Coding // ----------------------------------------------------------------------------- Constant ULong MONITOR_DEFAULTTONULL = 0 Longptr ll_hWnd, ll_handle ll_hWnd = Handle(aw_window) ll_handle = MonitorFromWindow(ll_hWnd, MONITOR_DEFAULTTONULL) If ll_handle = 0 Then Return False End If Return True end function public function long of_parse (string as_text, string as_sep, ref string as_array[]);// ---------------------------------------------------------------------------------------- // SCRIPT: of_Parse // // PURPOSE: This function parses a string into an array. // // ARGUMENTS: as_text - The object that was clicked on // as_sep - The separator characters // as_array - By ref output array // // RETURN: The number of items in the array // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 03/27/2015 RolandS Initial Coding // ----------------------------------------------------------------------------- String ls_empty[], ls_work Long ll_pos, ll_each as_array = ls_empty If IsNull(as_text) Or as_text = "" Then Return 0 ll_pos = Pos(as_text, as_sep) DO WHILE ll_pos > 0 ls_work = Trim(Left(as_text, ll_pos - 1)) as_text = Trim(Mid(as_text, ll_pos + Len(as_sep))) as_array[UpperBound(as_array) + 1] = ls_work ll_pos = Pos(as_text, as_sep) LOOP If Len(as_text) > 0 Then as_array[UpperBound(as_array) + 1] = as_text End If Return UpperBound(as_array) end function public function string of_replaceall (string as_oldstring, string as_findstr, string as_replace);// ----------------------------------------------------------------------------- // SCRIPT: of_ReplaceAll // // PURPOSE: This function all of the occurrences of a string within // another string. // // ARGUMENTS: as_oldstring - The string to be updated // as_findstr - The string to look for // as_replace - The replacement string // // RETURN: The updated string // // DATE CHANGED BY DESCRIPTION OF CHANGE / REASON // ---------- ---------- ----------------------------------------------------- // 02/17/2010 RolandS Initial creation // ----------------------------------------------------------------------------- String ls_newstring Long ll_findstr, ll_replace, ll_pos // get length of strings ll_findstr = Len(as_findstr) ll_replace = Len(as_replace) // find first occurrence ls_newstring = as_oldstring ll_pos = Pos(ls_newstring, as_findstr) Do While ll_pos > 0 // replace old with new ls_newstring = Replace(ls_newstring, ll_pos, ll_findstr, as_replace) // find next occurrence ll_pos = Pos(ls_newstring, as_findstr, (ll_pos + ll_replace)) Loop Return ls_newstring end function public function string of_getexefilename ();// ----------------------------------------------------------------------------- // SCRIPT: of_GetExeFileName // // PURPOSE: This function returns the full filename of the executable. // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 08/28/2016 RolandS Initial Coding // ----------------------------------------------------------------------------- Application la_app Longptr ll_hWnd String ls_module ULong lul_rc, lul_size = 260 la_app = GetApplication() ll_hWnd = Handle(la_app) ls_module = Space(lul_size) lul_rc = GetModuleFileName(ll_hWnd, ls_module, lul_size) Return ls_module end function public subroutine of_registerpsr ();// ----------------------------------------------------------------------------- // SCRIPT: of_RegisterPSR // // PURPOSE: This function registers the .psr file type with the program. // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/26/2019 RolandS Initial Coding // ----------------------------------------------------------------------------- Constant Long SHCNE_ASSOCCHANGED = 0 // 0x8000000 Constant ULong SHCNF_FLUSH = 0 // 0x1000 String ls_exefilename, ls_regkey, ls_regvalue ls_exefilename = this.of_GetExeFileName() ls_regkey = "HKEY_CLASSES_ROOT\.psr" RegistrySet(ls_regkey, "", RegString!, "PSRViewer.psr") ls_regkey = "HKEY_CLASSES_ROOT\PSRViewer.psr" RegistrySet(ls_regkey, "", RegString!, "Powersoft Report") ls_regkey = "HKEY_CLASSES_ROOT\PSRViewer.psr\DefaultIcon" ls_regvalue = ls_exefilename + ',0' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) ls_regkey = "HKEY_CLASSES_ROOT\PSRViewer.psr\shell\open\command" ls_regvalue = '"' + ls_exefilename + '" "%1"' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) ls_regkey = "HKEY_CLASSES_ROOT\Applications\psrviewer.exe\shell\open\command" ls_regvalue = '"' + ls_exefilename + '" "%1"' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) ls_regkey = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ApplicationAssociationToasts" RegistrySet(ls_regkey, "PSRViewer.psr_.psr", ReguLong!, 0) RegistrySet(ls_regkey, "Applications\psrviewer.exe_.psr", ReguLong!, 0) ls_regkey = "HKEY_CURRENT_USER\Software\Classes\.psr" RegistrySet(ls_regkey, "", RegString!, "PSRViewer.psr") ls_regkey = "HKEY_CURRENT_USER\Software\Classes\PSRViewer.psr" RegistrySet(ls_regkey, "", RegString!, "Powersoft Report") ls_regkey = "HKEY_CURRENT_USER\Software\Classes\PSRViewer.psr\shell\open\command" ls_regvalue = '"' + ls_exefilename + '" "%1"' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) ls_regkey = "HKEY_CURRENT_USER\Software\Classes\Applications\psrviewer.exe\DefaultIcon" ls_regvalue = ls_exefilename + ',0' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) ls_regkey = "HKEY_CURRENT_USER\Software\Classes\Applications\psrviewer.exe\shell\open\command" ls_regvalue = '"' + ls_exefilename + '" "%1"' RegistrySet(ls_regkey, "", RegString!, ls_regvalue) SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, 0, 0) end subroutine public function string of_getfolderpath (string as_folder);// ----------------------------------------------------------------------------- // SCRIPT: of_GetFolderPath // // PURPOSE: This function returns the path to a shell folder. // // ARGUMENTS: as_folder - Name of the shell folder // // DATE PROG/ID DESCRIPTION OF CHANGE / REASON // ---------- -------- ----------------------------------------------------- // 10/13/2006 RolandS Initial Coding // ----------------------------------------------------------------------------- Constant ULong SHGFP_TYPE_CURRENT = 0 Constant Long CSIDL_DESKTOP = 0 Constant Long CSIDL_PROGRAMS = 2 Constant Long CSIDL_PERSONAL = 5 Constant Long CSIDL_FAVORITES = 6 Constant Long CSIDL_STARTUP = 7 Constant Long CSIDL_RECENT = 8 Constant Long CSIDL_BITBUCKET = 10 Constant Long CSIDL_APPDATA = 26 String ls_path Long ll_rc, ll_csidl Longptr ll_hWnd ll_hWnd = Handle(this) // set the CSIDL choose case Upper(as_folder) case "DESKTOP" ll_csidl = CSIDL_DESKTOP case "PROGRAMS" ll_csidl = CSIDL_PROGRAMS case "PERSONAL" ll_csidl = CSIDL_PERSONAL case "FAVORITES" ll_csidl = CSIDL_FAVORITES case "STARTUP" ll_csidl = CSIDL_STARTUP case "RECENT" ll_csidl = CSIDL_RECENT case "BITBUCKET" ll_csidl = CSIDL_BITBUCKET case "APPDATA" ll_csidl = CSIDL_APPDATA case else Return "" end choose ls_path = Space(260) ll_rc = SHGetFolderPath(ll_hWnd, ll_csidl, & 0, SHGFP_TYPE_CURRENT, ls_path) Return ls_path end function on n_appobject.create call super::create TriggerEvent( this, "constructor" ) end on on n_appobject.destroy TriggerEvent( this, "destructor" ) call super::destroy end on
File: n_appobject.sru
Size: 14751
Date: Wed, 22 Mar 2023 21:57:12 +0100
Size: 14751
Date: Wed, 22 Mar 2023 21:57:12 +0100
- nonvisualobject autoinstantiate n_appobject(sru)
- of_delregkey (string as_subkey)
- of_getexefilename () returns string
- of_getfolderpath (string as_folder) returns string
- of_getreg (string as_subkey, string as_valuename, string as_default) returns string
- of_getreg (string as_valuename, string as_default) returns string
- of_isonmonitor (window aw_window) returns boolean
- of_parse (string as_text, string as_sep, ref string as_array[]) returns long
- of_registerpsr ()
- of_replaceall (string as_oldstring, string as_findstr, string as_replace) returns string
- of_setreg (string as_subkey, string as_valuename, string as_value)
- of_setreg (string as_valuename, string as_value)
- of_showwindow (window aw_window, windowstate ae_state)