From 7d0cd4700f1d4e2b2c0f0d7d5c6cdb592e7323b4 Mon Sep 17 00:00:00 2001 From: mbirth Date: Thu, 12 Apr 2007 18:42:34 +0000 Subject: [PATCH] + added mb_EnvTools.ahk for everything with environment variables * implemented ProgressBar on appStop * use appStop routine in appStart-onExit + added RunBeforeStop + added RunBeforeEject * handled all EnvVar-replacements through mb_EnvTools.ahk --- U3H_appStart.ahk | 47 +++------------- U3H_appStop.ahk | 30 +++++++++-- U3H_hostCleanUp.ahk | 35 +++++------- U3H_hostConfigure.ahk | 13 +---- U3Helper.ahk | 37 ++++--------- U3Helperex.ini | 6 +++ mb_EnvTools.ahk | 121 ++++++++++++++++++++++++++++++++++++++++++ mb_EnvTools.txt | 24 +++++++++ readme.txt | 27 ++++++++++ 9 files changed, 233 insertions(+), 107 deletions(-) create mode 100644 mb_EnvTools.ahk create mode 100644 mb_EnvTools.txt create mode 100644 readme.txt diff --git a/U3H_appStart.ahk b/U3H_appStart.ahk index 7ec98c3..dd9acef 100644 --- a/U3H_appStart.ahk +++ b/U3H_appStart.ahk @@ -1,6 +1,6 @@ -EnvSet USERPROFILE, %U3_APP_DATA_PATH% -EnvSet HOMEPATH, %U3_APP_DATA_PATH% -EnvSet APPDATA, %U3_APP_DATA_PATH%\Application Data +EnvSet USERPROFILE, % EnvValue("U3_APP_DATA_PATH") +EnvSet HOMEPATH, % EnvValue("U3_APP_DATA_PATH") +EnvSet APPDATA, % EnvValue("U3_APP_DATA_PATH") . "\Application Data" ; add custom PATH directories EnvGet ePATH, PATH @@ -8,24 +8,13 @@ IniGetKeys("envdir", INIFile, "EnvPath") Loop %envdir0% { CurPath := envdir%A_Index% - StringReplace CurPath, CurPath, % "%ALLUSERSPROFILE%", %eALLUSERSPROFILE%, A - StringReplace CurPath, CurPath, % "%APPDATA%", %eAPPDATA%, A - StringReplace CurPath, CurPath, % "%CommonProgramFiles%", %eCommonProgramFiles%, A - StringReplace CurPath, CurPath, % "%HOMEPATH%", %eHOMEPATH%, A - StringReplace CurPath, CurPath, % "%ProgramFiles%", %eProgramFiles%, A - StringReplace CurPath, CurPath, % "%SystemRoot%", %eSystemRoot%, A - StringReplace CurPath, CurPath, % "%USERPROFILE%", %eUSERPROFILE%, A - StringReplace CurPath, CurPath, % "%WINDIR%", %ewindir%, A - StringReplace CurPath, CurPath, % "%TEMP%", %eTEMP%, A - StringReplace CurPath, CurPath, % "%U3_APP_DATA_PATH%", %U3_APP_DATA_PATH%, A - StringReplace CurPath, CurPath, % "%U3_DEVICE_DOCUMENT_PATH%", %U3_DEVICE_DOCUMENT_PATH%, A - StringReplace CurPath, CurPath, % "%U3_DEVICE_EXEC_PATH%", %U3_DEVICE_EXEC_PATH%, A - StringReplace CurPath, CurPath, % "%U3_HOST_EXEC_PATH%", %U3_HOST_EXEC_PATH%, A - + CurPath := EnvParseStr(CurPath) + ePATH := CurPath . ";" . ePATH } EnvSet PATH, %ePATH% +EnvGet APPDATA, APPDATA IfNotExist %APPDATA% { FileCreateDir %APPDATA% @@ -41,27 +30,3 @@ Loop %0% } OnExit ASOnExit RunWait %cmdl% -Goto ASCloseDone - -ASOnExit: -Counter = 0 -ToolTip Closing %AppName% ... - -SplitPath AppExe, AppFile, null, null, null, null - -ASTryClose: -Process Exist, %AppFile% -If ErrorLevel - ProgPID = %ErrorLevel% -Else - ExitApp - -WinClose ahk_pid %ProgPID%, , 0.5 -If Counter >= 10 - Process Close, %ProgPID% -Counter += 1 -Sleep 200 -Goto ASTryClose - -ASCloseDone: -Tooltip diff --git a/U3H_appStop.ahk b/U3H_appStop.ahk index 28bf049..a207614 100644 --- a/U3H_appStop.ahk +++ b/U3H_appStop.ahk @@ -1,10 +1,29 @@ -Counter = 0 +ASOnExit: -ToolTip Closing %AppName% ... +StepsAll = 1 +If (StrLen(RunBeforeStop) > 0) + StepsAll++ +StepsStep := 100/StepsAll +StepsPos = 0 + +Progress b2 x%PL% y%PT% w%PW% m FM%PFM% FS%PFS%, U3Helper %U3HVer% - (c)2006-2007 Markus Birth , Cleaning up %AppName% ..., AHKProgress-%AppName% +WinSet Transparent, %PTrans%, AHKProgress-%AppName% + +If (StrLen(RunBeforeStop) > 0) +{ + Progress % StepsPos*StepsStep, Running stop command ... + RunBeforeStop := EnvParseStr(RunBeforeStop) + RunWait %RunBeforeStop% + StepsPos++ +} SplitPath AppExe, AppFile, null, null, null, null +Counter = 0 +CounterMax = 10 + TryClose: +Progress % StepsPos*StepsStep+StepsStep*Counter/CounterMax, Stopping %AppName% ... Process Exist, %AppFile% If ErrorLevel ProgPID = %ErrorLevel% @@ -12,10 +31,13 @@ Else Goto CloseDone WinClose ahk_pid %ProgPID%, , 0.5 -If Counter >= 10 +If Counter >= %CounterMax% +{ + Progress 100, Killing %AppName% ... Process Close, %ProgPID% +} Counter += 1 Goto TryClose CloseDone: -ToolTip +Progress 100, appStop done. diff --git a/U3H_hostCleanUp.ahk b/U3H_hostCleanUp.ahk index f931058..0fcf91a 100644 --- a/U3H_hostCleanUp.ahk +++ b/U3H_hostCleanUp.ahk @@ -5,6 +5,8 @@ ; ########################################################################## StepsAll = 0 +If (StrLen(RunBeforeEject) > 0) + StepsAll++ If regsvr0 > 0 StepsAll++ If datexe0 > 0 @@ -23,6 +25,14 @@ StepsPos = 0 Progress b2 x%PL% y%PT% w%PW% m FM%PFM% FS%PFS%, U3Helper %U3HVer% - (c)2006-2007 Markus Birth , Cleaning up %AppName% ..., AHKProgress-%AppName% WinSet Transparent, %PTrans%, AHKProgress-%AppName% +If (StrLen(RunBeforeEject) > 0) +{ + Progress % StepsPos*StepsStep, Running shutdown command ... + RunBeforeEject := EnvParseStr(RunBeforeEject) + RunWait %RunBeforeEject% + StepsPos++ +} + If (U3_IS_DEVICE_AVAILABLE <> "true") { ; U3 stick not plugged in!! @@ -57,17 +67,7 @@ Else If (A_LoopRegType = "REG_SZ" or A_LoopRegType = "REG_EXPAND_SZ" or A_LoopRegType = "REG_MULTI_SZ") { RegRead RegValue - StringReplace NewRegValue, RegValue, %U3_HOST_EXEC_PATH%, % "%U3_HOST_EXEC_PATH%", A - StringReplace NewRegValue, NewRegValue, %U3_APP_DATA_PATH%, % "%U3_APP_DATA_PATH%", A - StringReplace NewRegValue, NewRegValue, %U3_DEVICE_EXEC_PATH%, % "%U3_DEVICE_EXEC_PATH%", A - StringReplace NewRegValue, NewRegValue, %U3_DEVICE_DOCUMENT_PATH%, % "%U3_DEVICE_DOCUMENT_PATH%", A - StringReplace NewRegValue, NewRegValue, %eTEMP%, % "%TEMP%", A - StringReplace NewRegValue, NewRegValue, %eSystemRoot%, % "%SystemRoot%", A - StringReplace NewRegValue, NewRegValue, %eAPPDATA%, % "%APPDATA%", A - StringReplace NewRegValue, NewRegValue, %eUSERPROFILE%, % "%USERPROFILE%", A - StringReplace NewRegValue, NewRegValue, %eALLUSERSPROFILE%, % "%ALLUSERSPROFILE%", A - StringReplace NewRegValue, NewRegValue, %eCommonProgramFiles%, % "%CommonProgramFiles%", A - StringReplace NewRegValue, NewRegValue, %eProgramFiles%, % "%ProgramFiles%", A + NewRegValue := EnvUnparseStr(RegValue) If (NewRegValue <> RegValue) { RegWrite %NewRegValue% @@ -224,18 +224,7 @@ If (KeepSettings = "0" or Unattended = "1") Loop %fildel0% { CurFile := fildel%A_Index% - StringReplace CurFile, CurFile, % "%ALLUSERSPROFILE%", %eALLUSERSPROFILE%, A - StringReplace CurFile, CurFile, % "%APPDATA%", %eAPPDATA%, A - StringReplace CurFile, CurFile, % "%CommonProgramFiles%", %eCommonProgramFiles%, A - StringReplace CurFile, CurFile, % "%HOMEPATH%", %eHOMEPATH%, A - StringReplace CurFile, CurFile, % "%ProgramFiles%", %eProgramFiles%, A - StringReplace CurFile, CurFile, % "%SystemRoot%", %eSystemRoot%, A - StringReplace CurFile, CurFile, % "%USERPROFILE%", %eUSERPROFILE%, A - StringReplace CurFile, CurFile, % "%WINDIR%", %ewindir%, A - StringReplace CurFile, CurFile, % "%TEMP%", %eTEMP%, A - StringReplace CurFile, CurFile, % "%U3_APP_DATA_PATH%", %U3_APP_DATA_PATH%, A - StringReplace CurFile, CurFile, % "%U3_DEVICE_DOCUMENT_PATH%", %U3_DEVICE_DOCUMENT_PATH%, A - StringReplace CurFile, CurFile, % "%U3_DEVICE_EXEC_PATH%", %U3_DEVICE_EXEC_PATH%, A + CurFile := EnvParseStr(CurFile) FileGetAttrib FilAttr, %CurFile% IfInString FilAttr, D { diff --git a/U3H_hostConfigure.ahk b/U3H_hostConfigure.ahk index 7de58e0..c93fa27 100644 --- a/U3H_hostConfigure.ahk +++ b/U3H_hostConfigure.ahk @@ -82,18 +82,7 @@ If (ForeignSettings = "0") If (A_LoopRegType = "REG_SZ" or A_LoopRegType = "REG_EXPAND_SZ" or A_LoopRegType = "REG_MULTI_SZ") { RegRead RegValue - StringReplace NewRegValue, RegValue, % "%U3_HOST_EXEC_PATH%", %U3_HOST_EXEC_PATH%, A - StringReplace NewRegValue, NewRegValue, % "%U3_APP_DATA_PATH%", %U3_APP_DATA_PATH%, A - StringReplace NewRegValue, NewRegValue, % "%U3_DEVICE_EXEC_PATH%", %U3_DEVICE_EXEC_PATH%, A - StringReplace NewRegValue, NewRegValue, % "%U3_DEVICE_DOCUMENT_PATH%", %U3_DEVICE_DOCUMENT_PATH%, A - StringReplace NewRegValue, NewRegValue, % "%TEMP%", %eTEMP%, A - StringReplace NewRegValue, NewRegValue, % "%SystemRoot%", %eSystemRoot%, A - StringReplace NewRegValue, NewRegValue, % "%WINDIR%", %ewindir%, A - StringReplace NewRegValue, NewRegValue, % "%APPDATA%", %eAPPDATA%, A - StringReplace NewRegValue, NewRegValue, % "%USERPROFILE%", %eUSERPROFILE%, A - StringReplace NewRegValue, NewRegValue, % "%ALLUSERSPROFILE%", %eALLUSERSPROFILE%, A - StringReplace NewRegValue, NewRegValue, % "%CommonProgramFiles%", %eCommonProgramFiles%, A - StringReplace NewRegValue, NewRegValue, % "%ProgramFiles%", %eProgramFiles%, A + NewRegValue := EnvParseStr(RegValue) If (NewRegValue <> RegValue) { RegWrite %NewRegValue% diff --git a/U3Helper.ahk b/U3Helper.ahk index 8eb01b5..34b8539 100644 --- a/U3Helper.ahk +++ b/U3Helper.ahk @@ -1,45 +1,27 @@ #NoTrayIcon #NoEnv +#Include mb_EnvTools.ahk #Include mb_IniTools.ahk #Include mb_TextTools.ahk -U3HVer = 1.6 - -EnvGet U3_DEVICE_SERIAL, U3_DEVICE_SERIAL ; serial number of device (copy protection) -EnvGet U3_DEVICE_PATH, U3_DEVICE_PATH ; drive letter to device (F:) -EnvGet U3_DEVICE_DOCUMENT_PATH, U3_DEVICE_DOCUMENT_PATH ; path to documents (F:\Documents) -EnvGet U3_DEVICE_VENDOR, U3_DEVICE_VENDOR ; vendor -EnvGet U3_DEVICE_PRODUCT, U3_DEVICE_PRODUCT ; product name string -EnvGet U3_DEVICE_VENDOR_ID, U3_DEVICE_VENDOR_ID ; vendor id (decimal!! 2284 = 0x08ec) -EnvGet U3_APP_DATA_PATH, U3_APP_DATA_PATH ; data path for app (on device) -EnvGet U3_HOST_EXEC_PATH, U3_HOST_EXEC_PATH ; path to exe on host -EnvGet U3_DEVICE_EXEC_PATH, U3_DEVICE_EXEC_PATH ; path to needed files on device -EnvGet U3_ENV_VERSION, U3_ENV_VERSION ; should be 1.0 -EnvGet U3_ENV_LANGUAGE, U3_ENV_LANGUAGE ; language id of LaunchPad -EnvGet U3_IS_UPGRADE, U3_IS_UPGRADE ; can be "false" or "true" -EnvGet U3_IS_DEVICE_AVAILABLE, U3_IS_DEVICE_AVAILABLE ; "true"/"false" -EnvGet U3_IS_AUTORUN, U3_IS_AUTORUN ; is this an autorun-launch? "true"/"false" -EnvGet U3_DAPI_CONNECT_STRING, U3_DAPI_CONNECT_STRING ; who needs this? -EnvGet eALLUSERSPROFILE, ALLUSERSPROFILE ; C:\Documents and Settings\All Users -EnvGet eAPPDATA, APPDATA ; C:\Doc...\\Application Data -EnvGet eCommonProgramFiles, CommonProgramFiles ; C:\Program Files\Common Files -EnvGet eHOMEPATH, HOMEPATH ; C:\Documents and Settings\ -EnvGet eProgramFiles, ProgramFiles ; C:\Program Files -EnvGet eSystemRoot, SystemRoot ; C:\WINDOWS -EnvGet eUSERPROFILE, USERPROFILE ; C:\Documents and Settings\ -EnvGet eTEMP, TEMP ; C:\DOCUME~1\\LOCALS~1\Temp -EnvGet ewindir, windir ; C:\WINDOWS +U3HVer = 1.7 SplitPath A_ScriptFullPath, null, ScrDir, null, ScrFile, ScrDrive INIFile = %ScrDir%\%ScrFile%.ini IniRead AppName, %INIFile%, U3Helper, AppName, unknown IniRead AppExe, %INIFile%, U3Helper, AppExe, cmd.exe IniRead Unattended, %INIFile%, U3Helper, Unattended, 0 +IniRead RunBeforeStop, %INIFile%, U3Helper, RunBeforeStop, %A_Space% +IniRead RunBeforeEject, %INIFile%, U3Helper, RunBeforeEject, %A_Space% IniGetKeys("regsvr", INIFile, "regsvr32") IniGetKeys("datexe", INIFile, "DataToExecDir") IniGetKeys("regbak", INIFile, "RegBackup") IniGetKeys("regdel", INIFile, "RegDelete") IniGetKeys("fildel", INIFile, "FileDelete") +U3_APP_DATA_PATH := EnvValue("U3_APP_DATA_PATH") +U3_HOST_EXEC_PATH := EnvValue("U3_HOST_EXEC_PATH") +U3_DEVICE_EXEC_PATH := EnvValue("U3_DEVICE_EXEC_PATH") + WinGetPos,Tx,Ty,Tw,Th,ahk_class Shell_TrayWnd,,, ; Tw>Th: horizontal taskbar (top or bottom) ; Tw + MsgBox 64, U3Helper %U3HVer% - Debug info, % EnvList(), 30 } diff --git a/U3Helperex.ini b/U3Helperex.ini index 42e8e19..7239c8a 100644 --- a/U3Helperex.ini +++ b/U3Helperex.ini @@ -1,6 +1,12 @@ [U3Helper] AppName=PC OnPoint AppExe=PConPoint.exe + +; enter commandlines to run before stopping the application and before +; ejecting the device. All variables mentioned under [FileDelete] work. +RunBeforeStop= +RunBeforeEject= + ; set Unattended to 1 to suppress settings-related questions ; this way, previously existing settings on the host always get ; replaced by the U3's settings and restored on eject diff --git a/mb_EnvTools.ahk b/mb_EnvTools.ahk new file mode 100644 index 0000000..e020c52 --- /dev/null +++ b/mb_EnvTools.ahk @@ -0,0 +1,121 @@ +#NoEnv + +EnvVars0 = 0 +EnvVals0 = 0 + +; initial list of EnvVars to load +EnvVarsAll := "U3_DEVICE_SERIAL,U3_DEVICE_PATH,U3_DEVICE_DOCUMENT_PATH,U3_DEVICE_VENDOR,U3_DEVICE_PRODUCT,U3_DEVICE_VENDOR_ID" +EnvVarsAll .= ",U3_APP_DATA_PATH,U3_HOST_EXEC_PATH,U3_DEVICE_EXEC_PATH,U3_ENV_VERSION,U3_ENV_LANGUAGE,U3_IS_UPGRADE" +EnvVarsAll .= ",U3_IS_DEVICE_AVAILABLE,U3_IS_AUTORUN,U3_DAPI_CONNECT_STRING" +EnvVarsAll .= ",ALLUSERSPROFILE,APPDATA,CommonProgramFiles,HOMEPATH,ProgramFiles,SystemRoot,USERPROFILE,TEMP,windir" + +StringSplit EnvVarsx, EnvVarsAll, `,%A_Space% + +; Load EnvVar-Values and store in EnvVals-array +Loop %EnvVarsx0% +{ + EnvName := EnvVarsx%A_Index% + EnvGet EnvValsx%A_Index%, %EnvName% +} +EnvValsx0 = %EnvVarsx0% + +; Sort EnvVar-Values by StrLen() for re-replacement (value to var) +; and clean out empty vars +CurIndex = 1 +Loop %EnvVarsx0% +{ + MaxIndex = -1 + MaxLen = -1 + Loop %EnvValsx0% + { + CurNam := EnvVarsx%A_Index% + CurVal := EnvValsx%A_Index% + If ((StrLen(CurVal) >= MaxLen) and (StrLen(CurNam) > 0)) + { + MaxLen := StrLen(CurVal) + MaxIndex := A_Index + } + } + If (StrLen(EnvValsx%MaxIndex%) > 0) + { + EnvVars%CurIndex% := EnvVarsx%MaxIndex% + EnvVals%CurIndex% := EnvValsx%MaxIndex% + CurIndex++ + } + EnvVarsx%MaxIndex% := "" + EnvValsx%MaxIndex% := "" +} + +EnvVars0 := CurIndex-1 +EnvVals0 := CurIndex-1 + +; Debugging stuff: +;MsgBox % "comspec:" . EnvValue("comspec") +;MsgBox % EnvList() +;MsgBox % EnvParseStr("This is a %temp% test running %comspec%!") + + + + +EnvList() +{ + global + local result + result := "" + Loop %EnvVars0% + { + result .= EnvVars%A_Index% . " = " . EnvVals%A_Index% . "`n" + } + return result +} + +EnvValue(envname) +{ + global + local result + result := "" + Loop %EnvVars0% + { + If (EnvVars%A_Index% = envname) + { + return EnvVals%A_Index% + } + } + ; EnvVar not in list - try to catch it + EnvGet result, %envname% + If (StrLen(result) > 0) + { + ; seems like a result ~~> add to list + MyPointer := ++EnvVars0 + EnvVars%MyPointer% := envname + EnvVals%MyPointer% := result + EnvVals0++ + } + return result +} + +EnvParseStr(instring) +{ + global + local ReplFrom, ReplTo + Loop %EnvVars0% + { + ReplFrom := "%" . EnvVars%A_Index% . "%" + ReplTo := EnvVals%A_Index% + StringReplace instring, instring, %ReplFrom%, %ReplTo%, A + } + return instring +} + +EnvUnparseStr(instring) +{ + global + local ReplFrom, ReplTo + Loop %EnvVals0% + { + ReplFrom := EnvVals%A_Index% + ReplTo := "%" . EnvVars%A_Index% . "%" + StringReplace instring, instring, %ReplFrom%, %ReplTo%, A + } + return instring +} diff --git a/mb_EnvTools.txt b/mb_EnvTools.txt new file mode 100644 index 0000000..5517e5a --- /dev/null +++ b/mb_EnvTools.txt @@ -0,0 +1,24 @@ +EnvAdd("U3_DEVICE_SERIAL") ; serial number of device (copy protection) +EnvAdd("U3_DEVICE_PATH") ; drive letter to device (F:) +EnvAdd("U3_DEVICE_DOCUMENT_PATH") ; path to documents (F:\Documents) +EnvAdd("U3_DEVICE_VENDOR") ; vendor +EnvAdd("U3_DEVICE_PRODUCT") ; product name string +EnvAdd("U3_DEVICE_VENDOR_ID") ; vendor id (decimal!! 2284 = 0x08ec) +EnvAdd("U3_APP_DATA_PATH") ; data path for app (on device) +EnvAdd("U3_HOST_EXEC_PATH") ; path to exe on host +EnvAdd("U3_DEVICE_EXEC_PATH") ; path to needed files on device +EnvAdd("U3_ENV_VERSION") ; should be 1.0 +EnvAdd("U3_ENV_LANGUAGE") ; language id of LaunchPad +EnvAdd("U3_IS_UPGRADE") ; can be "false" or "true" +EnvAdd("U3_IS_DEVICE_AVAILABLE") ; "true"/"false" +EnvAdd("U3_IS_AUTORUN") ; is this an autorun-launch? "true"/"false" +EnvAdd("U3_DAPI_CONNECT_STRING") ; who needs this? +EnvAdd("ALLUSERSPROFILE") ; C:\Documents and Settings\All Users +EnvAdd("APPDATA") ; C:\Doc...\\Application Data +EnvAdd("CommonProgramFiles") ; C:\Program Files\Common Files +EnvAdd("HOMEPATH") ; C:\Documents and Settings\ +EnvAdd("ProgramFiles") ; C:\Program Files +EnvAdd("SystemRoot") ; C:\WINDOWS +EnvAdd("USERPROFILE") ; C:\Documents and Settings\ +EnvAdd("TEMP") ; C:\DOCUME~1\\LOCALS~1\Temp +EnvAdd("windir") ; C:\WINDOWS diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..f540e7c --- /dev/null +++ b/readme.txt @@ -0,0 +1,27 @@ +U3Helper +(c)2006-2007 by Markus Birth + +Some words for the manifest.u3i: + +If your app doesn't store anything inside %USERPROFILE% or such, then just call it directly +inside the - such as: + + -prefs "%U3_APP_DATA_PATH%\WebMon.ini" -pages "%U3_APP_DATA_PATH%\pages\WebPages.dat" + +BUT: If you app DOES store some stuff inside %USERPROFILE% (mostly noticeable if there appears something under + C:\Documents and Settings\\Application Data\\), call it as follows: + + appstart + +This way, the environment variables %USERPROFILE% and a bunch of other related will be set to point to the +data directory on the U3-stick and therefore those app will store its data there instead of on the host system. + + + + +Take a look at the U3Helperex.ini as there are all supported settings mentioned. You'll get the idea of the expected +format. + +U3Helper Forum: http://vanilla.birth-online.de/3/ +U3Helper English info: http://www.autohotkey.com/forum/topic11839.html +U3Helper German info: http://blog.birth-online.de/archives/164-Programme-U3-faehig-machen.html