$TC_INI = EnvGet("COMMANDER_INI")
$aAssocList = _TCHConListRead($TC_INI, "Associations", "Filter@|Filter@_open|Filter@.icon", 1)
For $i = 1 To $aAssocList[0][0]
$aExt = StringSplit($aAssocList[$i][0], ";")
For $j = 1 To $aExt[0]
$sCurExt = StringTrimLeft(StringStripWS($aExt[$j], 3), 2)
$sIconFile = @ScriptDir & "\ICON_REG\" & $sCurExt & "_icon.reg"
$sProgFile = @ScriptDir & "\PROG_REG\" & $sCurExt & "_prog.reg"
; программы
$hFile = FileOpen($sProgFile, 2+8+32)
FileWriteLine($hFile, "Windows Registry Editor Version 5.00" & @CRLF & @CRLF)
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\.%s]\r\n@=%sfile\r\n\r\n", $sCurExt, $sCurExt))
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\%sfile]\r\n\r\n", $sCurExt))
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\%sfile\\shell]\r\n\r\n", $sCurExt))
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\%sfile\\shell\\open]\r\n\r\n", $sCurExt))
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\%sfile\\shell\\open\\command]\r\n", $sCurExt))
$sProgPath = _TCHExpandEnv($aAssocList[$i][1])
$sProgPath = StringLeft($sProgPath, StringInStr($sProgPath, '"')-1)
$sProgPath = StringReplace(StringStripWS($sProgPath, 3), "\", "\\")
FileWriteLine($hFile, StringFormat('@="\\"%s\\" \\"\%1\\""', $sProgPath))
FileClose($hFile)
; иконки
$hFile = FileOpen($sIconFile, 2+8+32)
FileWriteLine($hFile, "Windows Registry Editor Version 5.00" & @CRLF & @CRLF)
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\.%s]\r\n@=%sfile\r\n\r\n", $sCurExt, $sCurExt))
FileWriteLine($hFile, StringFormat("[HKEY_CLASSES_ROOT\\%sfile]\r\n\r\n", $sCurExt))
FileWriteLine($hFile, StringFormat('[HKEY_CLASSES_ROOT\\%sfile\\DefaultIcon]\r\n', $sCurExt))
$sIconPath = _TCHExpandEnv($aAssocList[$i][2])
$sIconPath = StringReplace($sIconPath, "\", "\\")
FileWriteLine($hFile, StringFormat('@="%s"', $sIconPath))
FileClose($hFile)
Next
Next
; функция чтения "последовательных" списков
Func _TCHConListRead($sIniName, $sSection, $sKeysFormat, $nStartCount = 0)
Local $nNewIdx, $sErrStr = "<<none>>"
Local $aKeyNames = StringSplit($sKeysFormat, "|")
Local $nKeys = $aKeyNames[0]
Local $aResult[1][$nKeys] = [[0, $nKeys]]
Local $sRedirect = IniRead($sIniName, $sSection, "RedirectSection", $sErrStr)
If $sRedirect <> $sErrStr Then
$sRedirName = StringRegExpReplace($sIniName, "(.+\\)([^\\]+)", "\1")
$sIniName = $sRedirName & $sRedirect
EndIf
While 1
$sCurVal = IniRead($sIniName, $sSection, StringReplace($aKeyNames[1], "@", $aResult[0][0]+$nStartCount), $sErrStr)
If $sCurVal <> $sErrStr Then
$aResult[0][0] += 1
$nNewIdx = $aResult[0][0]
ReDim $aResult[$nNewIdx+1][$nKeys]
$aResult[$nNewIdx][0] = $sCurVal
For $i = 2 To $aKeyNames[0]
$sCurVal = IniRead($sIniName, $sSection, StringReplace($aKeyNames[$i], "@", $aResult[0][0]-1+$nStartCount), $sErrStr)
If $sCurVal <> $sErrStr Then $aResult[$nNewIdx][$i-1] = $sCurVal
Next
Else
Return $aResult
EndIf
Wend
EndFunc
; функция разворачивания переменных окружения
Func _TCHExpandEnv($sText)
$aResult = StringRegExp($sText, "%(\w+)%", 3)
If IsArray($aResult) Then
For $i = 0 To UBound($aResult)-1
$sText = StringReplace($sText, "%" & $aResult[$i] & "%", EnvGet($aResult[$i]))
Next
EndIf
Return $sText
EndFunc
|