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
Ассоциировать программу с типом файла
Заранее всем благодарен.
Заинтересовался задачкой и решил что мне тоже может пригодится такая функция, тем более что все необходимые функции у меня уже были.
Цитата:
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
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
так-то оно так, тока иконка у файла появится лишь после перезагрузки, а хотелось бы сразу...
Цитата:
так-то оно так, тока иконка у файла появится лишь после перезагрузки, а хотелось бы сразу...
Чего не пробовал, сразу никак :(
Спращивай на перезагрузку:
Код:
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
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
Спасибо всем огромное!!! Очень помогли!!! Это как раз то что мне и нужно было, только остался один маленький вопросик: а как это все закрутить в инсталяшку, чтобы все корректировки регистри выполнились один раз, при инсталяции??? Вроде, когда инсталяшку собираешь, я там ничего подходящего не видел (или может смотрел не туда). В общем если кто-нибудь и ц этим вопросом поможет - я буду совсем счастлив. Заранее всем спасибо.
Большинство продвинутых инст. позволяют добавлять в реестр свои ключи без проблем, наконец и сам твой exe может этим заняться.
А как вообще передать проге имя файла в качестве параметра? В смысле, как переданный параметр можно вообще в ней 'увидеть?'
RTFM ;)
в Form_Load или Sub Main:
Код:
If Command <> vbNullString Then
...
End if
...
End if
Command это и есть твой параметр в виде строки, а там разбирай её по всем возможным вариантам