Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ассоциировать программу с типом файла

2.1K
23 июня 2004 года
caca
25 / / 01.08.2003
Может кто-нибудь подскажет как сделать инсталяшку, чтобы программа при инсталяции "говорила" Винде - "теперь я буду обрабатывать файлы например типа *.ККК", чтобы в эксплорере все файлы типа *.ККК показывались с иконкой моей программы.
Заранее всем благодарен.
258
24 июня 2004 года
SergeySV
1.5K / / 19.03.2003
Заинтересовался задачкой и решил что мне тоже может пригодится такая функция, тем более что все необходимые функции у меня уже были.
И накатал вот такой пример:

Код:
Public Sub Main()

  Call RegExtFile("aaa", "MyProg", "Моя программа", "C:\InstMac.exe")
 
End Sub



Public Function RegExtFile(sExtFile As String, sNameProg As String, sFullNameProg As String, sPathExeFile As String) As Boolean
  ' регистрирует расширение файла в системе
  '[sExtFile]      - расширение файла; писать без точки, например "txt" или "mp3"
  '[sNameProg]     - имя программы, может быть любым, необязательно должно совпадать с именем exe-файла
  '[sFullNameProg] - полное имя программы, выступает в роли описания ключей в реестре и вывода информации о программе по зарег. расширению
  '[sPathExeFile]  - путь к exe-файлу
  'Возвращает True-все ОК, False-возникли ошибки
  'Используется вспомог. модуль: Registry.bas
  '
  '   ТЕХНОЛОГИЯ
  ' Все записи надо делать в разделе HKEY_CLASSES_ROOT. Для начала надо
  ' создать раздел с произвольным названием, обычно типа MyProgram.
  ' В этом разделе строковому параметру (Default)='Мой тип файла'.
  ' Создать в разделе MyProgram подраздел Shell, (Default)=''
  ' Создать в разделе Shell раздел aaa, т.е. выбранное нами расширение.
  ' В разделе aaa создать раздел command, значение по умолчанию - полный
  ' путь к вашей программе (если используются пробелы, то в кавычках) с %1.
  ' Например '"c:\program files\MyProgram\MyProgram.exe" %1'.
  ' Теперь второй шаг, самый главный:
  ' Создаем раздел HKEY_CLASSES_ROOT\.aaa
  ' В этом разделе строковому параметру (Default)='MyProgram', то есть это должно
  ' быть имя того раздела, который мы создали ранее.
 
 
  On Error GoTo Er_
 
  ' создаем HKEY_CLASSES_ROOT\MyProgram\Shell\aaa\command
  CreateNewKey HKEY_CLASSES_ROOT, sNameProg & "\Shell\" & sExtFile & "\command"
  ' присваиваем значение MyProgram
  SetKeyValueEx HKEY_CLASSES_ROOT, sNameProg, "", sFullNameProg, REG_SZ
  ' присваиваем значение command'у
  SetKeyValueEx HKEY_CLASSES_ROOT, sNameProg & "\Shell\" & sExtFile & "\command", "", sPathExeFile & " %1", REG_SZ
  ' создаем HKEY_CLASSES_ROOT\.aaa
  CreateNewKey HKEY_CLASSES_ROOT, "." & sExtFile
  ' присваиваем значение .aaa
  SetKeyValueEx HKEY_CLASSES_ROOT, "." & sExtFile, "", sNameProg, REG_SZ
 
  ' успешно закончили
  RegExtFile = True
 
Ex_:
  Exit Function
 
Er_:
  RegExtFile = False
  Resume Ex_

End Function
518
26 июня 2004 года
Andreika
101 / / 14.02.2003
Цитата:
Originally posted by SergeySV
Заинтересовался задачкой и решил что мне тоже может пригодится такая функция, тем более что все необходимые функции у меня уже были.
И накатал вот такой пример:

Код:
Public Sub Main()

  Call RegExtFile("aaa", "MyProg", "Моя программа", "C:\InstMac.exe")
 
End Sub



Public Function RegExtFile(sExtFile As String, sNameProg As String, sFullNameProg As String, sPathExeFile As String) As Boolean
  ' регистрирует расширение файла в системе
  '[sExtFile]      - расширение файла; писать без точки, например "txt" или "mp3"
  '[sNameProg]     - имя программы, может быть любым, необязательно должно совпадать с именем exe-файла
  '[sFullNameProg] - полное имя программы, выступает в роли описания ключей в реестре и вывода информации о программе по зарег. расширению
  '[sPathExeFile]  - путь к exe-файлу
  'Возвращает True-все ОК, False-возникли ошибки
  'Используется вспомог. модуль: Registry.bas
  '
  '   ТЕХНОЛОГИЯ
  ' Все записи надо делать в разделе HKEY_CLASSES_ROOT. Для начала надо
  ' создать раздел с произвольным названием, обычно типа MyProgram.
  ' В этом разделе строковому параметру (Default)='Мой тип файла'.
  ' Создать в разделе MyProgram подраздел Shell, (Default)=''
  ' Создать в разделе Shell раздел aaa, т.е. выбранное нами расширение.
  ' В разделе aaa создать раздел command, значение по умолчанию - полный
  ' путь к вашей программе (если используются пробелы, то в кавычках) с %1.
  ' Например '"c:\program files\MyProgram\MyProgram.exe" %1'.
  ' Теперь второй шаг, самый главный:
  ' Создаем раздел HKEY_CLASSES_ROOT\.aaa
  ' В этом разделе строковому параметру (Default)='MyProgram', то есть это должно
  ' быть имя того раздела, который мы создали ранее.
 
 
 End Function


так-то оно так, тока иконка у файла появится лишь после перезагрузки, а хотелось бы сразу...

8.0K
27 июня 2004 года
angel_in
4 / / 27.06.2004
2 Andreika,
Цитата:
так-то оно так, тока иконка у файла появится лишь после перезагрузки, а хотелось бы сразу...


Чего не пробовал, сразу никак :(
Спращивай на перезагрузку:

 
Код:
Private Declare Function SetupPromptReboot Lib "setupapi.dll" (ByRef FileQueue As Long, ByVal Owner As Long, ByVal ScanOnly As Long) As Long
Dim IsRebootNecessary as Boolean
 
If IsRebootNecessary Then SetupPromptReboot ByVal 0&, 0, 0

ЗЫ: забыли caca подсказать, что иконку то можно использовать любую - ключом
[COLOR=blue]
HKEY_CLASSES_ROOT\MyProgram\DefaultIcon[/COLOR]

Значение которого
C:\ProgramFiles\MyProgram\MyProgram.exe,5
или
C:\ProgramFiles\MyProgram\AnyIcon.ico
2.1K
28 июня 2004 года
caca
25 / / 01.08.2003
Спасибо всем огромное!!! Очень помогли!!! Это как раз то что мне и нужно было, только остался один маленький вопросик: а как это все закрутить в инсталяшку, чтобы все корректировки регистри выполнились один раз, при инсталяции??? Вроде, когда инсталяшку собираешь, я там ничего подходящего не видел (или может смотрел не туда). В общем если кто-нибудь и ц этим вопросом поможет - я буду совсем счастлив. Заранее всем спасибо.
258
28 июня 2004 года
SergeySV
1.5K / / 19.03.2003
А ты про какую инсталяшку говоришь?
Большинство продвинутых инст. позволяют добавлять в реестр свои ключи без проблем, наконец и сам твой exe может этим заняться.
4.7K
01 июля 2004 года
wdk
18 / / 23.02.2004
А как вообще передать проге имя файла в качестве параметра? В смысле, как переданный параметр можно вообще в ней 'увидеть?'
8.0K
10 июля 2004 года
angel_in
4 / / 27.06.2004
2 wdk

RTFM ;)

в Form_Load или Sub Main:
 
Код:
If Command <> vbNullString Then
       ...
    End if

Command это и есть твой параметр в виде строки, а там разбирай её по всем возможным вариантам
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог