СообЧа > База Знаний > Программирование > Visual Basic > Файлы и папки

Вопрос

Какие коды должны быть в теле программы-аналога Windows Блокнота и какие «мероприятия» необходимо провести, чтобы после замены стандартного Блокнота при клике на любом текстовом файле открывался мой новый Блокнот и в нем отображался открываемый документ.
У меня все работает, кроме отображения документа. Блокнот всегда открывается на новом документе. Хотелось бы, чтобы и открываемый документ отображался.

Ответ

Сначала нужно привязать расширение txt к своей программе. Для этого есть такая процедура:
'это в раздел General Declarations
Private Declare Function RegCreateKey Lib "advapi32.dll" _
Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey _
As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" _
Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Sub AssociateMyApp(ByVal sAppName As String, _
ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String)
Dim lRegKey As Long
Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
Call RegCloseKey(lRegKey)
Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
Call RegCloseKey(lRegKey)
If Len(sIcon) Then
Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon))
Call RegCloseKey(lRegKey)
End If
End Sub


Присваиваем расширение программе через такой вызов процедуры:
AssociateMyApp(«Название программы», «Имя exe-файла», ".txt», «Имя файла с иконкой»)
Например:
AssociateMyApp(«My TextEditor», «C:\MyProgram.exe %1», ".txt», «C:\icon.ico»)
!!! %1 ставить обязательно
%1 показывает, что нужно передать приложению в командной строке имя открывающегося файла.
Дальше нужно из программы отловить имя открывающегося документа. На Form_Load или Sub Main:
Dim sCommand As String
Dim sFileName As String
sCommand = Command$()
If Left$ (sCommand, 1) = Chr (34) Then
sCommand = Right$ (sCommand, Len (sCommand) — 1)
End If
If Right$ (sCommand, 1) = Chr (34) Then
sCommand = Left$ (sCommand, Len (sCommand) — 1)
End If
sFileName = sCommand


Путь к файлу в переменной sFileName. Дальше нужно загрузить этот файл в твой редактор.

Сурменок Павел



Copyright © 2000-2004 Сообщество Чайников
Контактная информация