Russian Qt Forum
Ноябрь 24, 2024, 12:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение пути по имени файла.  (Прочитано 3004 раз)
cefire
Гость
« : Май 22, 2013, 20:34 »

Я хочу получить список программ для функции "открыть с помощью".
Для этого я получаю 2 списка программ по ассоциациям. Далее для каждого списка использую соответственно следующие функции:
Код:
QSettings sett("HKEY_CLASSES_ROOT\\"+progids[i]+"\\shell\\open\\command",QSettings::NativeFormat);
QString val=sett.value("").toString();
и
Код:
QSettings sett("HKEY_CLASSES_ROOT\\Applications\\"+programs[i]+"\\shell\\open\\command",QSettings::NativeFormat);
QString val=sett.value("").toString();

Результат помещаю в новый список. Пример списка для BMP:

Цитировать
"C:\Program Files\Adobe\Adobe Illustrator CS6\Support Files\Contents\Windows\Illustrator.exe" "%1"
"C:\Program Files\Adobe\Adobe Photoshop CS5\Photoshop.exe" "%1"
"C:\Program Files\Adobe\Adobe Photoshop CS6\Photoshop.exe" "%1"
"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" /dde
"C:\Program Files\Opera\Opera.exe" "%1"
"%systemroot%\system32\mspaint.exe" "%1"
C:\PROGRA~1\MIF5BA~1\Office14\OIS.EXE /shellOpen "%1"
%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1

Теперь мне это нужно преобразовать в следующее:

Цитировать
C:\Program Files\Adobe\Adobe Illustrator CS6\Support Files\Contents\Windows\Illustrator.exe
C:\Program Files\Adobe\Adobe Photoshop CS5\Photoshop.exe
C:\Program Files\Adobe\Adobe Photoshop CS6\Photoshop.exe
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
C:\Program Files\Opera\Opera.exe
%systemroot%\system32\mspaint.exe
C:\PROGRA~1\MIF5BA~1\Office14\OIS.EXE
%SystemRoot%\System32\rundll32.exe

Конечно можно обрезать в строке первый символ, если он кавычка, и до .exe
Но можно ли как-нибудь по-другому, например пропарсить чем-нибудь коммандную строку?

Дополнительно:
Можно ли для
Цитировать
%SystemRoot%\System32\rundll32.exe "%ProgramFiles%\Windows Photo Viewer\PhotoViewer.dll", ImageView_Fullscreen %1
получить иконку и описание из PhotoViewer.dll
« Последнее редактирование: Май 22, 2013, 20:52 от cefire » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 22, 2013, 20:51 »

в данном случае лучше кавычки искать ручками и проверять на первый символ
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
cefire
Гость
« Ответ #2 : Май 22, 2013, 20:55 »

1) Данные берутся динамически с реестра.
2) Просто кавычки смотреть - не работает. Выше есть пример
Цитировать
C:\PROGRA~1\MIF5BA~1\Office14\OIS.EXE /shellOpen "%1"
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Май 22, 2013, 21:08 »

и проверять на первый символ
не просто ж так я это написал. если первый символ — не кавычка, тогда ищется пробел.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
cefire
Гость
« Ответ #4 : Май 22, 2013, 22:12 »

Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.