RbBFBlokProjPSIVStrn2006.02 ACnmStrnAChpStrnACsvStrnVer1Strn1 Ver2Strn0 Ver3Strn0 RelsStrn0 NnRlStrn0 RegnStrnSVerStrnLVerStrnIVerStrnaiviInt DVewInt MprTpInt DLanInt CLanInt DEncInt BflgInt IconGrupEndGInt MacCStrnBMacStrnMy Application (Classic)BCarStrnMy Application BCMOStrnMy Application BSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnBWinStrnKioskTester.exe BMDIInt WcmNStrnWpNmStrnWiNmStrnBL86Strn MyApplication PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjpONameStrnApp ContInt paswStrnbClsInt SuprStrnKioskApplicationbNtrInt bApOInt CompStrnPDefGrup$nameStrnMenuBar PValInt gEndGInt VwBhGrupEndGInt CnstGrupEncoInt nameStrnkFileQuitShortcut typeInt defnStrnflagInt CInsGrup0pltfInt langInt defnStrnCmd+Q EndGInt EndGInt CnstGrupEncoInt nameStrn kFileQuit typeInt defnStrnQuitflagInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt CInsGrup0pltfInt langInt defnStrnE&xit EndGInt EndGInt CnstGrupEncoInt nameStrn kEditClear typeInt defnStrn&Delete flagInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt CInsGrup0pltfInt langInt defnStrn&Delete EndGInt EndGInt PadnPadn`************************************************************************************************BlokpVewM NameStrn KioskTester ContInt paswStrnbClsInt SuprStrnWindow bNtrInt CompStrnPDefGrup0nameStrnMenuBar PValStrn 1742282751 EndGInt PDefGrup(nameStrn MacProcID PValInt EndGInt PDefGrup4nameStrn BalloonHelp EncoInt PValStrnEndGInt PDefGrup0nameStrnMinimizeButton PValStrnTrueEndGInt PDefGrup4nameStrnMaximizeButton PValStrnFalse EndGInt PDefGrup0nameStrn LiveResize PValStrnFalse EndGInt PDefGrup0nameStrn Resizeable PValStrnFalse EndGInt PDefGrup,nameStrn CloseButton PValStrnTrueEndGInt PDefGrup0nameStrnMenuBarVisible PValStrnTrueEndGInt PDefGrup0nameStrn FullScreen PValStrnFalse EndGInt PDefGrup(nameStrnVisible PValStrnTrueEndGInt PDefGrup8nameStrnTitle EncoInt PValStrnUntitledEndGInt PDefGrup$nameStrnBackdropPValStrnEndGInt PDefGrup(nameStrn BackColor PValInt EndGInt PDefGrup0nameStrn HasBackColorPValStrnFalse EndGInt PDefGrup0nameStrn Composite PValStrnFalse EndGInt PDefGrup$nameStrnFrame PValInt EndGInt PDefGrup(nameStrn MaxHeight PValInt }EndGInt PDefGrup$nameStrnMaxWidthPValInt }EndGInt PDefGrup(nameStrn MinHeight PValInt @EndGInt PDefGrup$nameStrnMinWidthPValInt @EndGInt PDefGrup$nameStrnHeight PValInt ,EndGInt PDefGrup$nameStrnWidth PValInt ,EndGInt PDefGrup(nameStrn Placement PValInt EndGInt VwBhGrup VwPrGrup0NameStrnNameVsblInt PrGpStrnID EndGInt VwPrGrup8NameStrn Interfaces VsblInt PrGpStrnID EndGInt VwPrGrup4NameStrnSuper VsblInt PrGpStrnID EndGInt VwPrGrupNameStrn Placement VsblInt PrGpStrnPositionPValStrn0 EnumGrupdefnStrn 0 - Default defnStrn1 - Parent Window defnStrn2 - Main Screen defnStrn3 - Parent Window ScreendefnStrn 4 - Stagger EndGInt EndGInt VwPrGrupHNameStrnWidth VsblInt PrGpStrnPositionPValStrn300 EndGInt VwPrGrupHNameStrnHeight VsblInt PrGpStrnPositionPValStrn300 EndGInt VwPrGrupHNameStrnMinWidthVsblInt PrGpStrnPositionPValStrn64 EndGInt VwPrGrupLNameStrn MinHeight VsblInt PrGpStrnPositionPValStrn64 EndGInt VwPrGrupLNameStrnMaxWidthVsblInt PrGpStrnPositionPValStrn32000 EndGInt VwPrGrupPNameStrn MaxHeight VsblInt PrGpStrnPositionPValStrn32000 EndGInt VwPrGrupNameStrnFrame VsblInt PrGpStrn Appearance PValStrn0 EnumGrupPdefnStrn 0 - DocumentdefnStrn1 - Movable Modal defnStrn2 - Modal DialogdefnStrn3 - Floating Window defnStrn 4 - Plain Box defnStrn5 - Shadowed BoxdefnStrn6 - Rounded Window defnStrn7 - Global Floating Window defnStrn8 - Sheet WindowdefnStrn9 - Metal WindowdefnStrn10 - Drawer Window EndGInt EndGInt VwPrGrupTNameStrn Composite VsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupTNameStrn HasBackColorVsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupTNameStrn BackColor VsblInt PrGpStrn Appearance PValStrn&hFFFFFFEndGInt VwPrGrup<NameStrnBackdropVsblInt PrGpStrn Appearance EndGInt VwPrGrupPNameStrnTitle VsblInt PrGpStrn Appearance PValStrnUntitledEndGInt VwPrGrupLNameStrnVisible VsblInt PrGpStrn Appearance PValStrnTrueEndGInt VwPrGrupTNameStrn FullScreen VsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupTNameStrnMenuBarVisible VsblInt PrGpStrn Appearance PValStrnTrueEndGInt VwPrGrupPNameStrn CloseButton VsblInt PrGpStrn Appearance PValStrnTrueEndGInt VwPrGrupTNameStrn Resizeable VsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupTNameStrn LiveResize VsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupXNameStrnMaximizeButton VsblInt PrGpStrn Appearance PValStrnFalse EndGInt VwPrGrupTNameStrnMinimizeButton VsblInt PrGpStrn Appearance PValStrnTrueEndGInt VwPrGrup@NameStrn BalloonHelp VsblInt PrGpStrn Appearance EndGInt VwPrGrupPNameStrn MacProcID VsblInt PrGpStrn Appearance PValStrn0 EndGInt VwPrGrup<NameStrnMenuBar VsblInt PrGpStrn Appearance EndGInt EndGInt CBhvGrupSuprStrn StaticText EndGInt CtrlGrup hcclsStrn StaticText nameStrn StaticText PDefGrup8nameStrnNameEncoInt PValStrn StaticText1 EndGInt PDefGrup<nameStrnIndex EncoInt PValStrn -2147483648 EndGInt PDefGrup8nameStrn ControlOrderEncoInt PValStrn0 EndGInt PDefGrup0nameStrnLeftEncoInt PValStrn20 EndGInt PDefGrup0nameStrnTop EncoInt PValStrn14 EndGInt PDefGrup4nameStrnWidth EncoInt PValStrn260 EndGInt PDefGrup4nameStrnHeight EncoInt PValStrn52 EndGInt PDefGrup0nameStrnLockLeftEncoInt PValStrnEndGInt PDefGrup0nameStrnLockTop EncoInt PValStrnEndGInt PDefGrup4nameStrn LockRight EncoInt PValStrnEndGInt PDefGrup4nameStrn LockBottom EncoInt PValStrnEndGInt PDefGrup<nameStrn TabPanelIndex EncoInt PValStrn0 EndGInt PDefGrupnameStrnTextEncoInt PValStrnuYou are now running in kiosk mode. When you quit the application, you will switch back to regular mode automatically EndGInt PDefGrup8nameStrn TextAlign EncoInt PValStrn0 EndGInt PDefGrup8nameStrn TextColor EncoInt PValStrn0 EndGInt PDefGrup8nameStrn Multiline EncoInt PValStrnTrueEndGInt PDefGrup4nameStrnEnabled EncoInt PValStrnTrueEndGInt PDefGrup4nameStrnVisible EncoInt PValStrnTrueEndGInt PDefGrup0nameStrnHelpTag EncoInt PValStrnEndGInt PDefGrup<nameStrnAutoDeactivate EncoInt PValStrnTrueEndGInt PDefGrup8nameStrnTextFontEncoInt PValStrnSystem EndGInt PDefGrup4nameStrnTextSizeEncoInt PValStrn0 EndGInt PDefGrup,nameStrnBoldEncoInt PValStrnEndGInt PDefGrup0nameStrnItalic EncoInt PValStrnEndGInt PDefGrup4nameStrn Underline EncoInt PValStrnEndGInt PDefGrup4nameStrn DataSource EncoInt PValStrnEndGInt PDefGrup4nameStrn DataField EncoInt PValStrnEndGInt PDefGrup8nameStrn InitialParent EncoInt PValStrnEndGInt PDefGrup<nameStrnSuper EncoInt PValStrn StaticText EndGInt CBixInt EndGInt PadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnug NameStrnMenuBar1ContInt paswStrnMItmGruppspmuInt nameStrnFileMenutextStrn&File indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnFileQuittextStrn#App.kFileQuit indxInt scutStrn#App.kFileQuitShortcut MiSKStrn#App.kFileQuitShortcut maEnInt EncoInt flagInt SuprStrn QuitMenuItemEndGInt EndGInt MItmGrup<spmuInt nameStrnEditMenutextStrn&Edit indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemMItmGrupspmuInt nameStrnEditUndotextStrn&Undo indxInt scutStrnCmd+Z MiSKStrnZ MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrup|spmuInt nameStrntextStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCut textStrnCu&tindxInt scutStrnCmd+X MiSKStrnX MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrnEditCopytextStrn&Copy indxInt scutStrnCmd+C MiSKStrnC MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditPaste textStrn&Paste indxInt scutStrnCmd+V MiSKStrnV MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditClear textStrn#App.kEditClear indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrup|spmuInt nameStrntextStrn- indxInt scutStrnmaEnInt EncoInt flagInt SuprStrnMenuItemEndGInt MItmGrupspmuInt nameStrn EditSelectAll textStrn Select &All indxInt scutStrnCmd+A MiSKStrnA MiMkInt maEnInt EncoInt flagInt SuprStrnMenuItemEndGInt EndGInt PadnPadn************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpFol98NameStrn Kiosk Mode ContInt paswStrnPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj[WNameStrnKioskApplicationContInt 98paswStrnbClsInt SuprStrn Application bNtrInt CompStrnHInsGrup nameStrnOpenCompStrnVsblInt sorcGrup EncoInt srclStrn Sub Open() srclStrn1mAppTester = new Mutex( App.ExecutableFile.Name ) srclStrnif mAppTester.TryEnter then srclStrnmSoft Declare Function CreateDesktopW Lib "User32" ( name as WString, device as Integer, devMode as Integer, _ srclStrn@flags as Integer, access as Integer, sec as Integer ) as IntegersrclStrn@Declare Function GetCurrentThreadId Lib "Kernel32" () as IntegersrclStrnPSoft Declare Function GetThreadDesktop Lib "User32" ( id as Integer ) as IntegersrclStrnzSoft Declare Function OpenInputDesktop Lib "User32" ( flags as Integer, inherit as Boolean, access as Integer ) as Integer srclStrnBSoft Declare Sub SetThreadDesktop Lib "User32" ( desk as Integer ) srclStrn?Soft Declare Sub SwitchDesktop Lib "User32" ( desk as Integer ) srclStrn>Soft Declare Sub CloseDesktop Lib "User32" ( desk as Integer ) srclStrnsrclStrnConst GENERIC_ALL = &H10000000 srclStrn#Const DESKTOP_SWITCHDESKTOP = &H100 srclStrnsrclStrn@// These local variables will hold all of our desktop referencessrclStrn-Dim hDesk, hOldDesk, hOldInputDesk as Integer srclStrnsrclStrn=// The first thing we need to do is keep track of the current srclStrn;// desktop so that we can switch back to it when we're done srclStrn1hOldDesk = GetThreadDesktop( GetCurrentThreadId ) srclStrnsrclStrn(// We also need to get the input desktopsrclStrnChOldInputDesk = OpenInputDesktop( 0, false, DESKTOP_SWITCHDESKTOP ) srclStrnif hOldInputDesk = 0 then srclStrnMKioskModeException.Create( "Could not open the input desktop for switching" ) srclStrnreturn srclStrnend if srclStrnsrclStrnD// Now we're ready to make our new desktop. We're just going to usesrclStrn,// the application name as the desktop name.srclStrnJhDesk = CreateDesktopW( App.ExecutableFile.Name, 0, 0, 0, GENERIC_ALL, 0 ) srclStrnif hDesk = 0 then srclStrn=KioskModeException.Create( "Could not create a new desktop" ) srclStrnreturn srclStrnend if srclStrnsrclStrn9// Now that we've made a new desktop, let's set it up and srclStrn// switch over to itsrclStrnSetThreadDesktop( hDesk ) srclStrnSwitchDesktop( hDesk ) srclStrnsrclStrnH// Since we're the first instance, we want to launch another instance ofsrclStrn0// this application, and wait for it to completesrclStrn?App.ExecutableFile.LaunchAndWait( "", App.ExecutableFile.Name ) srclStrnsrclStrn// Now clean everything up srclStrnif hDesk <> 0 then srclStrnSwitchDesktop( hOldInputDesk ) srclStrnSetThreadDesktop( hOldDesk )srclStrnCloseDesktop( hDesk ) srclStrnend if srclStrnsrclStrn// We're done too srclStrnQuitsrclStrnsrclStrnreturn srclStrnelsesrclStrn?// Call the user's Open event since this is a "normal" instance srclStrn// of the kiosk application srclStrnOpensrclStrnend if srclStrnsrclStrn*Exception err as FunctionNotFoundException srclStrn:// Cannot run in true kiosk mode, so do something about it srclStrnPKioskModeException.Create( "Kiosk mode not supported on this operating system" )srclStrnEnd Sub EndGInt EndGInt HookGrupPnameStrnOpenEncoInt flagInt !SySFInt parmStrnrsltStrnEndGInt PropGrupTEncoInt declStrnmAppTester As Mutex flagInt !CompStrnshrdInt EndGInt VwBhGrupEndGInt PadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj7\7NameStrnKioskModeException ContInt 98paswStrnbClsInt SuprStrnRuntimeExceptionbNtrInt CompStrnMethGrup\nameStrnCreate CompStrnVsblInt sorcGrupEncoInt srclStrn! Shared Sub Create(msg as String) srclStrndim r as new KioskModeException srclStrnr.Message = msg srclStrnsrclStrnraise r srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrn msg as String rsltStrnEndGInt VwBhGrupPVwPrGrup0NameStrnNameVsblInt PrGpStrnID EndGInt VwPrGrupLNameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 EndGInt VwPrGrup4NameStrnSuper VsblInt PrGpStrnID EndGInt VwPrGrupDNameStrnLeftVsblInt PrGpStrnPositionPValStrn0 EndGInt VwPrGrupDNameStrnTop VsblInt PrGpStrnPositionPValStrn0 EndGInt VwPrGrup,NameStrnMessage PrGpStrnBehaviorEndGInt VwPrGrup@NameStrn ErrorNumber PrGpStrnBehaviorPValStrn0 EndGInt EndGInt PadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObj'\NameStrnFolderItemExtensionsContInt 98paswStrnbClsInt bNtrInt CompStrnMethGrup<nameStrnLaunch CompStrnVsblInt sorcGrupx EncoInt srclStrn>Sub Launch(extends f as FolderItem, ParamArray args as String) srclStrn#if TargetWin32 srclStrnWSoft Declare Sub ShellExecuteA Lib "Shell32" ( hwnd as Integer, operation as CString, _ srclStrnKfile as CString, params as CString, directory as CString, show as Integer ) srclStrnWSoft Declare Sub ShellExecuteW Lib "Shell32" ( hwnd as Integer, operation as WString, _ srclStrnKfile as WString, params as WString, directory as WString, show as Integer ) srclStrnsrclStrndim params as StringsrclStrnparams = Join( args, " " ) srclStrnsrclStrn@if System.IsFunctionAvailable( "ShellExecuteW", "Shell32" ) thensrclStrn9ShellExecuteW( 0, "open", f.AbsolutePath, params, "", 1 ) srclStrnelsesrclStrn9ShellExecuteA( 0, "open", f.AbsolutePath, params, "", 1 ) srclStrnend if srclStrn#endif srclStrnEnd Sub EndGInt  EncoInt AlasStrnflagInt shrdInt parmStrn2extends f as FolderItem, ParamArray args as String rsltStrnEndGInt MethGrup nameStrn GetShortPathCompStrnVsblInt sorcGrup  EncoInt srclStrn8Function GetShortPath(extends f as FolderItem) As stringsrclStrn#if TargetWin32 srclStrn9/// This takes a long path and returns the truncated path srclStrnI/// for example GetShortPath("c:\program files") will return C:\progra~1 srclStrnQ/// useful in shells and other places where spaces in paths are hard to deal with srclStrnDim Res As integer srclStrn,Dim TruncatedPath as new MemoryBlock( 1024 )srclStrnsrclStrnSoft Declare Function GetShortPathNameA Lib "kernel32" (lpszLongPath As cString, lpszShortPath As ptr, lBuffer As integer) As integer srclStrnSoft Declare Function GetShortPathNameW Lib "kernel32" (lpszLongPath As WString, lpszShortPath As ptr, lBuffer As integer) As integer srclStrnsrclStrnEif System.IsFunctionAvailable( "GetShortPathNameW", "Kernel32" ) then srclStrnB// We do 512 here because it's the number of characters, not bytes srclStrn=res = GetShortPathNameW( f.AbsolutePath, TruncatedPath, 512 ) srclStrn1if res > 0 then return TruncatedPath.WString( 0 ) srclStrnelsesrclStrn>res = GetShortPathNameA( f.AbsolutePath, TruncatedPath, 1024 ) srclStrnsrclStrn1if res > 0 then return TruncatedPath.CString( 0 ) srclStrnend if srclStrn#endif srclStrn End FunctionEndGInt  EncoInt AlasStrnflagInt shrdInt parmStrnextends f as FolderItem rsltStrnstring EndGInt  MethGrup  nameStrnAssociateExtension CompStrnVsblInt sorcGrup  EncoInt srclStrn?Sub AssociateExtension(extends f as FolderItem, set as Boolean) srclStrn<' We wanna make two different registry items in CLASSES_ROOTsrclStrn' to deal with this.srclStrnsrclStrn&dim theExtension, theAppName as String srclStrndim numDots as Integer srclStrnsrclStrn$numDots = CountFields( f.Name, "." )srclStrn5theExtension = "." + nthField( f.Name, ".", numDots ) srclStrn8theAppName = nthField( App.ExecutableFile.Name, ".", 1 )srclStrnsrclStrn4dim exten as new RegistryItem( "HKEY_CLASSES_ROOT" )srclStrnsrclStrn if set then srclStrntry srclStrn)// Try to get a folder with the extension srclStrn#exten = exten.Child( theExtension ) srclStrncatch srclStrn2// The extension isn't listed in the folder, so we srclStrn// need to make it srclStrn'exten = exten.AddFolder( theExtension ) srclStrnend srclStrnsrclStrn7// Now we need to set the externsion to the application srclStrn// name srclStrnexten.DefaultValue = theAppName srclStrnsrclStrn4// Now we need to make a folder with our applicationsrclStrn// name srclStrn/exten = new RegistryItem( "HKEY_CLASSES_ROOT" ) srclStrnsrclStrntry srclStrn+// Get the folder with the application name srclStrn!exten = exten.Child( theAppName ) srclStrncatch srclStrn)// The app name doesn't exist, so we need srclStrn // to make it srclStrn%exten = exten.AddFolder( theAppName ) srclStrnend srclStrnsrclStrn3// Now we need to try opening the Shell folder from srclStrn// the exten folder srclStrntry srclStrnexten = exten.Child( "Shell" ) srclStrncatch srclStrn// It doesn't exist, so make it srclStrn"exten = exten.AddFolder( "Shell" ) srclStrnend srclStrnsrclStrn&// And we need the Open folder as well srclStrntry srclStrnexten = exten.Child( "open" ) srclStrncatch srclStrn// Make that one toosrclStrn!exten = exten.AddFolder( "open" ) srclStrnend srclStrnsrclStrn/// Finally, we need to set the command property srclStrn// to our application srclStrntry srclStrn exten = exten.Child( "command" )srclStrncatch srclStrn// Make it as well srclStrn$exten = exten.AddFolder( "command" )srclStrnend srclStrnsrclStrnNexten.DefaultValue = """" + App.ExecutableFile.AbsolutePath + """" + " ""%1""" srclStrnelsesrclStrn)// We want to delete the extension folder srclStrnexten.Delete( theExtension )srclStrnend srclStrnEnd Sub EndGInt  EncoInt AlasStrnflagInt shrdInt parmStrn'extends f as FolderItem, set as Boolean rsltStrnEndGInt  MethGrupnameStrnIsExtensionAssociated CompStrnVsblInt sorcGrupEncoInt srclStrnBFunction IsExtensionAssociated(extends f as FolderItem) As Boolean srclStrn<' We wanna make two different registry items in CLASSES_ROOTsrclStrn' to deal with this.srclStrnsrclStrn&dim theExtension, theAppName as String srclStrndim numDots as Integer srclStrnsrclStrn$numDots = CountFields( f.Name, "." )srclStrn5theExtension = "." + nthField( f.Name, ".", numDots ) srclStrn8theAppName = nthField( App.ExecutableFile.Name, ".", 1 )srclStrnsrclStrn4dim exten as new RegistryItem( "HKEY_CLASSES_ROOT" )srclStrnsrclStrntry srclStrn)// Try to get a folder with the extension srclStrn#exten = exten.Child( theExtension ) srclStrncatch srclStrn7// The folder doesn't exist, so we're SO not associated srclStrn return falsesrclStrnend srclStrnsrclStrn7// Now we need to set the externsion to the application srclStrn// name srclStrn(return (exten.DefaultValue = theAppName)srclStrnsrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrnextends f as FolderItem rsltStrnBoolean EndGInt MethGrupdnameStrn StartupItem CompStrnVsblInt sorcGrupEncoInt srclStrnXSub StartupItem(extends f as FolderItem, machineWide as Boolean, assigns set as Boolean)srclStrn#if TargetWin32 srclStrndim runItem as RegistryItem srclStrnsrclStrnif machineWide then srclStrnarunItem = new RegistryItem( "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\" ) srclStrnelsesrclStrn`runItem = new RegistryItem( "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\" )srclStrnend srclStrnsrclStrnsrclStrn$dim theAppName, theAppPath as StringsrclStrn(theAppName = nthField( f.Name, ".", 1 )srclStrn)theAppPath = """" + f.AbsolutePath + """" srclStrn if set then srclStrn(runItem.Value( theAppName ) = theAppPathsrclStrnelsesrclStrnrunItem.Delete( theAppName )srclStrnend srclStrnsrclStrn#endif srclStrn exception srclStrnreturn srclStrnEnd Sub EndGInt EncoInt AlasStrnflagInt shrdInt parmStrnGextends f as FolderItem, machineWide as Boolean, assigns set as Boolean rsltStrnEndGInt MethGrupnameStrn IsStartupItem CompStrnVsblInt sorcGrupEncoInt srclStrnRFunction IsStartupItem(extends f as FolderItem, machineWide as Boolean) As Boolean srclStrn#if TargetWin32 srclStrndim runItem as RegistryItem srclStrnsrclStrnif machineWide then srclStrnarunItem = new RegistryItem( "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\" ) srclStrnelsesrclStrn`runItem = new RegistryItem( "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\" )srclStrnend srclStrnsrclStrnsrclStrndim theAppName as StringsrclStrn(theAppName = nthField( f.Name, ".", 1 )srclStrnsrclStrn*return (runItem.Value( theAppName ) <> "") srclStrn#endif srclStrnsrclStrn exception srclStrn return falsesrclStrn End FunctionEndGInt EncoInt AlasStrnflagInt shrdInt parmStrn/extends f as FolderItem, machineWide as Boolean rsltStrnBoolean EndGInt MethGrupnameStrnStartWatchingForChanges CompStrnVsblInt sorcGrupEncoInt srclStrnMSub StartWatchingForChanges(extends f as FolderItem, watchSubDirs as Boolean) srclStrn#if TargetWin32 srclStrnSoft Declare Function FindFirstChangeNotificationA Lib "Kernel32" ( path as CString, watchSubDirs as Boolean, flags as Integer ) as Integer srclStrnSoft Declare Function FindFirstChangeNotificationW Lib "Kernel32" ( path as WString, watchSubDirs as Boolean, flags as Integer ) as Integer srclStrnsrclStrn/Const FILE_NOTIFY_CHANGE_FILE_NAME = &h00000001 srclStrn.Const FILE_NOTIFY_CHANGE_DIR_NAME = &h00000002 srclStrnsrclStrn$// Try to start watching for changessrclStrndim handle as Integer srclStrnPif System.IsFunctionAvailable( "FindFirstChangeNotificationW", "Kernel32" ) thensrclStrnhandle = FindFirstChangeNotificationA( f.AbsolutePath, watchSubDirs, FILE_NOTIFY_CHANGE_FILE_NAME + FILE_NOTIFY_CHANGE_DIR_NAME ) srclStrnelsesrclStrnhandle = FindFirstChangeNotificationW( f.AbsolutePath, watchSubDirs, FILE_NOTIFY_CHANGE_FILE_NAME + FILE_NOTIFY_CHANGE_DIR_NAME ) srclStrnend if srclStrnsrclStrnif handle <> -1 thensrclStrn/// If we don't have a handle map, then make one srclStrn "" then srclStrnif unicodeSavvy thensrclStrnAdeskStr = ConvertEncoding( deskName + Chr( 0 ), Encodings.UTF16 ) srclStrnelsesrclStrndeskStr = deskName + Chr( 0 ) srclStrnend if srclStrnsrclStrnstartupInfo.Ptr( 8 ) = deskStr srclStrnend if srclStrnsrclStrndim ret as Boolean srclStrnif unicodeSavvy thensrclStrn[ret = CreateProcessW( f.AbsolutePath, params, 0, 0, false, 0, 0, 0, startupInfo, procInfo ) srclStrnelsesrclStrn[ret = CreateProcessA( f.AbsolutePath, params, 0, 0, false, 0, 0, 0, startupInfo, procInfo ) srclStrnend if srclStrnsrclStrnif not ret then return srclStrnsrclStrnhDeclare Function WaitForSingleObject Lib "Kernel32" ( handle as Integer, howLong as Integer ) as IntegersrclStrnConst INFINITE = -1 srclStrnConst WAIT_TIMEOUT = &h00000102 srclStrnConst WAIT_OBJECT_0 = &h0 srclStrnsrclStrn6// We want to loop here so that we can yield time back srclStrn6// to other threads. This means threaded applications srclStrnB// will "just work", but non-threaded ones will still appear hung. srclStrnAwhile WaitForSingleObject( procInfo.Long( 0 ), 1 ) = WAIT_TIMEOUT srclStrnApp.SleepCurrentThread( 10 )srclStrnwendsrclStrnsrclStrn nil then srclStrnmb.Long( 0 ) = wnd.Handle srclStrnend if srclStrn#endif srclStrnsrclStrn if move thensrclStrnmb.Long( 4 ) = FO_MOVE srclStrnelsesrclStrnmb.Long( 4 ) = FO_COPY srclStrnend if srclStrnsrclStrndim fromFilePath as String srclStrndim fromStr as MemoryBlock srclStrnsrclStrnif unicodeSavvy thensrclStrnHfromFilePath = ConvertEncoding( fromFile.AbsolutePath, Encodings.UTF16 )srclStrn5fromStr = new MemoryBlock( LenB( fromFilePath ) + 4 ) srclStrn#fromStr.WString( 0 ) = fromFilePath srclStrnelsesrclStrnPfromFilePath = ConvertEncoding( fromFile.AbsolutePath, Encodings.SystemDefault )srclStrn5fromStr = new MemoryBlock( LenB( fromFilePath ) + 2 ) srclStrn#fromStr.CString( 0 ) = fromFilePath srclStrnend if srclStrnsrclStrnmb.Ptr( 8 ) = fromStr srclStrnsrclStrndim toFilePath as StringsrclStrndim toStr as MemoryBlocksrclStrnif unicodeSavvy thensrclStrnDtoFilePath = ConvertEncoding( toFile.AbsolutePath, Encodings.UTF16 )srclStrn1toStr = new MemoryBlock( LenB( toFilePath ) + 4 ) srclStrntoStr.WString( 0 ) = toFilePath srclStrnelsesrclStrnLtoFilePath = ConvertEncoding( toFile.AbsolutePath, Encodings.SystemDefault )srclStrn1toStr = new MemoryBlock( LenB( toFilePath ) + 2 ) srclStrntoStr.CString( 0 ) = toFilePath srclStrnend if srclStrnsrclStrnmb.Ptr( 12 ) = toStrsrclStrnsrclStrnmb.Long( 16 ) = 0 // Flags srclStrnKmb.Long( 20 ) = 0 // Byref "bool" to let you know if operation was aborted srclStrn4mb.Long( 24 ) = 0 // Don't care about name mappingssrclStrnBmb.Ptr( 28 ) = nil // Don't care about the progress title caption srclStrnsrclStrnif unicodeSavvy thensrclStrnSHFileOperationW( mb ) srclStrnelsesrclStrnSHFileOperationA( mb ) srclStrnend if srclStrn#endif srclStrnEnd Sub EndGInt !EncoInt AlasStrnflagInt !shrdInt parmStrn=fromFile as FolderItem, toFile as FolderItem, move as Boolean rsltStrnEndGInt  MethGrup"nameStrnMoveFileToWithProgress CompStrnVsblInt sorcGrup#EncoInt srclStrnPSub MoveFileToWithProgress(extends fromFile as FolderItem, toFile as FolderItem)srclStrn)// Delegate to the heavy-lifting function srclStrn$CopyMoveOp( fromFile, toFile, true )srclStrnEnd Sub EndGInt #EncoInt AlasStrnflagInt shrdInt parmStrn4extends fromFile as FolderItem, toFile as FolderItemrsltStrnEndGInt "MethGrup$nameStrnReveal CompStrnVsblInt sorcGrup\%EncoInt srclStrn#Sub Reveal(extends f as FolderItem) srclStrn;dim param as String = "/select, """ + f.AbsolutePath + """" srclStrnsrclStrnaSoft Declare Sub ShellExecuteA Lib "Shell32" ( hwnd as Integer, op as CString, file as CString, _ srclStrn9params as CString, directory as Integer, cmd as Integer ) srclStrnaSoft Declare Sub ShellExecuteW Lib "Shell32" ( hwnd as Integer, op as WString, file as WString, _ srclStrn9params as WString, directory as Integer, cmd as Integer ) srclStrnsrclStrnConst SW_SHOW = 5 srclStrnsrclStrn@if System.IsFunctionAvailable( "ShellExecuteW", "Shell32" ) thensrclStrn9ShellExecuteW( 0, "open", "explorer", param, 0, SW_SHOW ) srclStrnelsesrclStrn9ShellExecuteA( 0, "open", "explorer", param, 0, SW_SHOW ) srclStrnend if srclStrnsrclStrnEnd Sub EndGInt %EncoInt AlasStrnflagInt shrdInt parmStrnextends f as FolderItem rsltStrnEndGInt $PropGrup\&EncoInt declStrnmChangeHandles As DictionaryflagInt !CompStrnshrdInt EndGInt &VwBhGrup'VwPrGrup0(NameStrnNameVsblInt PrGpStrnID EndGInt (VwPrGrupL)NameStrnIndex VsblInt PrGpStrnID PValStrn -2147483648 EndGInt )VwPrGrup4*NameStrnSuper VsblInt PrGpStrnID EndGInt *VwPrGrupD+NameStrnLeftVsblInt PrGpStrnPositionPValStrn0 EndGInt +VwPrGrupD,NameStrnTop VsblInt PrGpStrnPositionPValStrn0 EndGInt ,EndGInt 'PadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpUIsWnStGrupd-OTabGrup.ContInt eSptInt EndGInt .LsLcStrn(Home) rEdtRectglEndGInt -PadnPadnX****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************EOF!