Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа с файлами панелей инструментов тотал коммндера

Ответить
Настройки темы
[решено] Работа с файлами панелей инструментов тотал коммндера

Старожил


Сообщения: 156
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip 009_TV.zip
(811 байт, 21 просмотров)
Привет участникам форума!

Имеются файлы примерно такого содержания:
Код: Выделить весь код
[Buttonbar]
Buttoncount=15
button1=Wcmicons.dll,385
cmd1=%COMMANDER_PATH%\Programs\Players\VLC\Vlc.exe
iconic1=0
menu1=Открыть файлы/папки в VLC
param1=%P%S
button2=Wcmicons.dll,391
cmd2=%COMMANDER_PATH%\Programs\Players\Media_Player_Classic\MPlayerc.exe
iconic2=0
menu2=Открыть файл в MPlayer Classic
param2=%P%N
button3=
iconic3=0
button4=Wcmicons.dll,388
cmd4=%COMMANDER_PATH%\Programs\Players\Light_Alloy\LA.exe
iconic4=0
menu4=Открыть файлы/папки в Light Alloy
param4=%P%S
button5=Wcmicons.dll,389
cmd5=%COMMANDER_PATH%\Programs\Players\JetAudio\JetAudioPortable.exe
iconic5=0
menu5=Открыть файл/папку в JetAudio
param5=%P%N
button6=Wcmicons.dll,1757
cmd6=%COMMANDER_PATH%\Plugins\wlx\AmpView\AmpView.exe
iconic6=0
menu6=Открыть файлы в AmpView
param6=%P%S
button7=Wcmicons.dll,1742
iconic7=0
iconic8=0
button9=Wcmicons.dll,395
cmd9=%COMMANDER_PATH%\Programs\Players\Flash_Movie_Player\fmp.exe
menu9=Открыть файл в Flash Movie Player
param9=%P%N
button10=Wcmicons.dll,1283
cmd10=%COMMANDER_PATH%\Programs\Players\FlashPlayer\FlashPlayer.exe
menu10=Открыть файл в Flash Player
param10=%P%N
button11=Wcmicons.dll,1284
cmd11=%COMMANDER_PATH%\Programs\Players\Flash_Player_Pro\Flash_Player_Pro.exe
menu11=Открыть файл в Flash Player Pro
param11=%P%N
button12=Wcmicons.dll,402
cmd12=%COMMANDER_PATH%\Programs\Graphics\IrfanView\Plugins\IV_Player.exe
iconic12=0
menu12=Открыть файл в плеере IrfanView
param12=%P%N
button13=Wcmicons.dll,398
cmd13=%COMMANDER_PATH%\Programs\Graphics\XnView\xnview.exe
menu13=Открыть файл в плеере Xn View
param13=%P%N
button14=Wcmicons.dll,979
cmd14=%COMMANDER_PATH%\Programs\Players\KMPlayer\KMPlayerPortable.exe
menu14=Открыть файлы в KMPlayer
param14=%P%S
button15=Wcmicons.dll,396
cmd15=%COMMANDER_PATH%\Programs\Audio\Teen_Spirit\jaangle.exe
param15=%P%N
menu15=Открыть файл в плеере TeenSpirit
iconic15=0
iconic13=0
iconic9=0
cmd7=%COMMANDER_PATH%\Programs\Players\Ubi\UbiquitousPlayer.exe
param7=
path7=
menu7=Плеер Ubiquitous
Надо - иметь диалог выбора файла, чтобы при открытии открывался файл в текстовом поле (рабочий пример прилагаю) и по нажатию кнопки чтобы проходила конвертация к виду:
Код: Выделить весь код
menu1#!#button1#!#cmd1#!#param1
То есть на выходе надо получить такую же строку, как я писал в этой теме http://forum.oszone.net/thread-267794.html
То есть
Код: Выделить весь код
MENUITEM menu1#!#button1#!#cmd1#!#param1
Button1 - зависит от условия, есть ли в строке wcmicons.dll

Рабочий пример
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#Region ### START Koda GUI section ###
$Form1 = GUICreate("Form1", 813, 453, 435, 124)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 409, 401)
GUICtrlSetData(-1, "")
$Edit2 = GUICtrlCreateEdit("", 424, 8, 385, 401)
GUICtrlSetData(-1, "")
$Button1 = GUICtrlCreateButton("Button1", 8, 424, 113, 25)
$Button2 = GUICtrlCreateButton("Button2", 320, 424, 193, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
Case $Button1
_FileOpen()
Case $Button2
_Convert()
    EndSwitch
WEnd

Func _FileOpen()
  $h_file=FileOpenDialog ( "Открыть bar файл", @ScriptDir, "Файлы панелей Total Commander (*.bar)")
  $h_fileread=FileRead($h_file)
  GUICtrlSetData ($Edit1,$h_fileread)
EndFunc

Func _Convert()

EndFunc
Bar файл для экспериментов в архиве в прикрепленном файле. Может, что забыл уточнить, хотя вроде все

Отправлено: 15:22, 14-09-2013

 

Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
ищите: Регулярные выражения - Джеффри Фридл »
нашел. читаю. с начала, как самый новенький в вопросе))

Отправлено: 11:43, 15-09-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Прямо мистика. В regexp (программа) регулярное выражение работает, выдает ту строку, что надо. а в скрипте - нет

Отправлено: 14:50, 15-09-2013 | #12


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Если кому интересно, то решил вопрос такой заменой строк. Функция
Код: Выделить весь код
Func _zamena()
$sData = GUICtrlRead($Edit2)
$sData = StringRegExpReplace($sData, '(?m)^MENUITEM\s\r\n', '')
$sData = StringRegExpReplace($sData, '(?m)^MENUITEM\s\-2\r\n','')
GUICtrlSetData($Edit2, $sData)
EndFunc
Согласен, регулярные выражения далеки от идеала, но как же я был рад, когда увидел, что они работают

Отправлено: 16:24, 15-09-2013 | #13


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
решил вопрос такой заменой строк »
„Мудрец не попадёт в ситуацию, из которой умный найдёт выход!“...

Другими словами, лучше предотвратить подобную запись, чем потом её исправлять:

Код: Выделить весь код
...

Func _ConvertBarFile($sMenuHeader = 'MENUITEM', $sDelim = '#!#', $sInStrCond = 'wcmicons.dll')
    Local $sRead = GUICtrlRead($iBarIn_Edit)
    Local $iCount = Int(_IniString_Read($sRead, 'Buttonbar', 'buttoncount', 0))

    Local $sItems = ''

    For $i = 1 To $iCount
        Dim $aItem[4] = _
                [ _
                _IniString_Read($sRead, 'Buttonbar', 'menu' & $i, ''), _ ;Menu
                _IniString_Read($sRead, 'Buttonbar', 'button' & $i, ''), _ ;Button
                _IniString_Read($sRead, 'Buttonbar', 'cmd' & $i, ''), _ ;Cmd
                _IniString_Read($sRead, 'Buttonbar', 'param' & $i, '') _ ;Param
                ]

        $sLine = $sMenuHeader & ' '

        For $j = 0 To 3
            If $j = 1 And StringInStr($aItem[$j], $sInStrCond) Then
                $aItem[$j] = StringRegExpReplace($aItem[$j], '.*?(-?\d+)', '\1')
            EndIf

            If $aItem[$j] <> '' Then
                If $j > 0 And $aItem[$j - 1] <> '' Then
                    $sLine &= $sDelim & $aItem[$j]
                Else
                    $sLine &= $aItem[$j]
                EndIf
            EndIf
        Next

        If $sLine = $sMenuHeader & ' ' Or Not StringInStr($sLine, $sDelim) Then
            ContinueLoop
        EndIf

        $sItems &= $sLine & @CRLF
    Next

    Return $sItems
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:36, 15-09-2013 | #14


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Другими словами, лучше предотвратить подобную запись, чем потом её исправлять: »
ну тебе может и проще, но я в твоем коде пока еще путаюсь, так что и пробовал по своему

Отправлено: 17:43, 16-09-2013 | #15


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
тебе может и проще »
Я ничего не говорил о простоте, я писал что это лучше, более правильно.

Цитата eus_deus:
я в твоем коде пока еще путаюсь, так что и пробовал по своему »
Я же не в качестве претензии или что то, я просто указал на более грамотное решение проблеме (и кстати это стоит взять на вооружение, не только для данного случая).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 19:10, 16-09-2013 | #16


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


Creat0R, я никаких претензий не имею.Вообще благодарен тебе в частности и форуму в общем, что даете мне ответы на мои иногда бредовые вопросы

Цитата Creat0R:
If $sLine = $sMenuHeader & ' ' Or Not StringInStr($sLine, $sDelim) Then
ContinueLoop
EndIf »
это получается только эти строки отвечают за нужное мне условие? что то наподобие - "если строка равна "MENUITEM " или строка не содержит $Delim, то перейти к следующей строке"? я правильно понял?

Отправлено: 20:23, 16-09-2013 | #17


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
это получается только эти строки отвечают за нужное мне условие? что то наподобие - "если строка равна "MENUITEM " или строка не содержит $Delim, то перейти к следующей строке"? я правильно понял? »
На все вопросы "Да" .

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 23:59, 16-09-2013 | #18


Старожил


Сообщения: 156
Благодарности: 1

Профиль | Отправить PM | Цитировать


вынужден возобновить данный вопрос. не все гладко с некоторыми панелями. вот пример
Код: Выделить весь код
[Buttonbar]
Buttoncount=20
button1=%COMMANDER_PATH%\Wcmicons.dll,977
cmd1=%COMMANDER_PATH%\Programs\Internet\The_Bat!\TheBatPortable.exe
iconic1=0
menu1=Почтовый клиент TheBat
button2=%COMMANDER_PATH%\Wcmicons.dll,896
cmd2=%COMMANDER_PATH%\Programs\Internet\MirandaIM\Miranda32.exe
iconic2=0
menu2=Miranda
button3=%COMMANDER_PATH%\Wcmicons.dll,767
cmd3=%COMMANDER_PATH%\Programs\Internet\Opera_AC\OperaLauncher.exe
iconic3=0
menu3=Opera AC  CTRL+SHIFT+ALT+O
button4=%COMMANDER_PATH%\Wcmicons.dll,768
cmd4=%COMMANDER_PATH%\Programs\Internet\Firefox\FirefoxPortable.exe
iconic4=0
menu4=Mozilla Firefox
button5=%COMMANDER_PATH%\Wcmicons.dll,487
cmd5=%COMMANDER_PATH%\Programs\Internet\GoogleEarth\GoogleEarthPortable.exe
iconic5=0
menu5=Планета Земля в GoogleEarth
button6=%COMMANDER_PATH%\Games\SolSuite\SolSuite 2012 12.6 + Graphics Pack 12.6.exe
cmd6=""%COMMANDER_PATH%\Games\SolSuite\SolSuite 2012 12.6 + Graphics Pack 12.6.exe""
path6=%COMMANDER_PATH%\Games\SolSuite\
iconic6=0
menu6=SolSuite 2012 12.6 + Graphics Pack 12.6
button7=
iconic7=0
button8=%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\AuditionPortable.exe
cmd8=""%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\AuditionPortable.exe""
path8=%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\
iconic8=0
menu8=AuditionPortable
button9=%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\App\Au\Adobe Audition CS6.exe
cmd9=""%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\App\Au\Adobe Audition CS6.exe""
param9=%P%S
path9=%COMMANDER_PATH%\Programs\Audio\Adobe Audition CS6\App\Au\
iconic9=0
menu9=Открыть выделенные файлы в Adobe Audition CS6
button10=%COMMANDER_PATH%\Wcmicons.dll,779
cmd10=%COMMANDER_PATH%\Scripts\RunStopRestart.vbs
param10=""%%COMMANDER_PATH%%\Programs\Text\Punto_Switcher\Punto.exe" 3"
iconic10=-1
menu10=Автопереключение клавиатуры с Punto Switcher: Вкл./Выкл.
button11=%COMMANDER_PATH%\Wcmicons.dll,1878
cmd11=AkelPad.exe
iconic11=0
menu11=Открыть редактор AkelPad
button12=%COMMANDER_PATH%\Programs\Others\Cabinet\cabinet.exe
cmd12=""%COMMANDER_PATH%\Programs\Others\Cabinet\cabinet.exe""
path12=%COMMANDER_PATH%\Programs\Others\Cabinet\
iconic12=-1
menu12=Cabinet нумизмата
button13=%COMMANDER_PATH%\Programs\Players\AIMP3\AIMP3.exe
cmd13=%COMMANDER_PATH%\Programs\Players\AIMP3\AIMP3.exe D:\Musik\Musik.m3u
path13=D:\Musik\
menu13=Musik
button14=%COMMANDER_PATH%\Utilities\Scripting\AutoIt\CV\CV.exe
cmd14=%COMMANDER_PATH%\Utilities\Scripting\AutoIt\CV\CV.exe
path14=%COMMANDER_PATH%\Utilities\Scripting\AutoIt\CV\
iconic14=0
menu14=CV
button15=
iconic15=0
button16=%COMMANDER_PATH%\Wcmicons.dll,431
cmd16=%COMMANDER_PATH%\TCIMG.exe
param16=moves=%L||[input=BOX33]!!1
iconic16=-1
menu16=Перемещает выделенные объекты в активную панель - в создаваемую  папку с вводом имени папки, заменяя имеющиеся объекты
button17=%COMMANDER_PATH%\Wcmicons.dll,1744
cmd17=%COMMANDER_PATH%\TCIMG.exe
param17=copys=%L||[input=BOX33]!!1
iconic17=-1
menu17=Копирует выделенные объекты в активную панель - в создаваемую  папку с вводом имени папки, заменяя имеющиеся объекты
button18=
iconic18=0
button19=%COMMANDER_PATH%\Wcmicons.dll,431
cmd19=%COMMANDER_PATH%\TCIMG.exe
param19=moves=%L||"%p[INPUT=BOX35]\"!!3!!(.*\\)(([^\\]*\\){1})(.+)\\?!!$1$4
iconic19=-1
menu19=Перемещает выделенные объекты на уровень вверх в создаваемую папку,  заменяя имеющиеся объекты
button20=%COMMANDER_PATH%\Wcmicons.dll,1744
cmd20=%COMMANDER_PATH%\TCIMG.exe
param20=copys=%L||"%p[INPUT=BOX35]\"!!3!!(.*\\)(([^\\]*\\){1})(.+)\\?!!$1$4
iconic20=-1
menu20=Копирует выделенные объекты на уровень вверх в создаваемую папку,  заменяя имеющиеся объекты
Не конвертируются последние 4 команды.Вот эти
Код: Выделить весь код
button16=%COMMANDER_PATH%\Wcmicons.dll,431
cmd16=%COMMANDER_PATH%\TCIMG.exe
param16=moves=%L||[input=BOX33]!!1
iconic16=-1
menu16=Перемещает выделенные объекты в активную панель - в создаваемую  папку с вводом имени папки, заменяя имеющиеся объекты
button17=%COMMANDER_PATH%\Wcmicons.dll,1744
cmd17=%COMMANDER_PATH%\TCIMG.exe
param17=copys=%L||[input=BOX33]!!1
iconic17=-1
menu17=Копирует выделенные объекты в активную панель - в создаваемую  папку с вводом имени папки, заменяя имеющиеся объекты
button18=
iconic18=0
button19=%COMMANDER_PATH%\Wcmicons.dll,431
cmd19=%COMMANDER_PATH%\TCIMG.exe
param19=moves=%L||"%p[INPUT=BOX35]\"!!3!!(.*\\)(([^\\]*\\){1})(.+)\\?!!$1$4
iconic19=-1
menu19=Перемещает выделенные объекты на уровень вверх в создаваемую папку,  заменяя имеющиеся объекты
button20=%COMMANDER_PATH%\Wcmicons.dll,1744
cmd20=%COMMANDER_PATH%\TCIMG.exe
param20=copys=%L||"%p[INPUT=BOX35]\"!!3!!(.*\\)(([^\\]*\\){1})(.+)\\?!!$1$4
iconic20=-1
menu20=Копирует выделенные объекты на уровень вверх в создаваемую папку,  заменяя имеющиеся объекты
Может, еще какие файлы не проходят, но пока этот один попался. Подозреваю, что все из за спецсимволов в командах

Отправлено: 22:27, 26-09-2013 | #19


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата eus_deus:
не все гладко с некоторыми панелями »
Это ошибка в библиотеке IniString.
Нужно в ней заменить все вхождения [\n|\r] на [\n\r].

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:21, 29-09-2013 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа с файлами панелей инструментов тотал коммндера

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Работа с файлами D@n1k007 Программирование и базы данных 2 19-06-2010 16:06
Система - Встраивание кнопок или панелей инструментов в Проводник (Explorer) greenzed Программное обеспечение Windows 1 12-01-2009 12:00
Интерфейс - Пропала одна из панелей инструментов, что находитса на панели задач Gensun Microsoft Windows 2000/XP 9 15-02-2008 17:11
Работа с файлами ramo Программирование в *nix 5 23-04-2007 12:33
[решено] GPO - Запрет закрытия панелей инструментов molen Microsoft Windows NT/2000/2003 2 24-11-2005 10:19




 
Переход