Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Создание Reg файлов из внутренних ассоциаций ТС 
Author Message
Loopback



PostPosted: Thu Jan 21, 2010 18:47    Post subject: Reply with quote

Да, что-то заблудился я в кавычках и слешах... Вот исправленный вариант.

Code:

$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
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group