Что передается при клике на файл ассоциированному приложению

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Что передается при клике на файл ассоциированному приложению

Сообщение Eugenio » 03.01.2005 (Пн) 21:11

Расскажите ламеру про сабж, плз
:roll: (Что и как передается, при клике на файл, приложению, которое ассоциировано с этим типом файлов.
Причина вопроса: прога умеет обрабатывать параметры командной строки и нормально открывает файл, имя к-рого передано в командной строке.
А вот когда попробовал ассоциировать тип файлов с этой прогой - при запуске ошибка)
Есть ли у меня вопрос? У меня всегда есть вопрос

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 03.01.2005 (Пн) 21:15

Это смотря как асоциирована. Windows передает имя файла двумя способами, в зависимости от записей в реестре: или как аргумент командной строки, или используя DDE.
Так или иначе не ясно, гдже именно ошибка.

Как маленькое замечание: в завивсимости от вида пути к проге, прописаной в реестре, Windows передает полное или сокращенное имя файла...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 03.01.2005 (Пн) 21:19

А как проявляется (в реестре) случай, когда используется DDE? :oops:
(в способе передачи файла проблемы не может быть, вроде бы, я пробовал и с длинными, и с короткими именами возиться)
Есть ли у меня вопрос? У меня всегда есть вопрос

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 03.01.2005 (Пн) 21:31

1. Как приложение асоциировалось?
2. Какая именно ошибка?
3. Код, отвечающий за чтение командной строки и открытие файла можешь привести?

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 03.01.2005 (Пн) 21:31

Нашел несколько записей в реестре:
1. "HKEY_CLASSES_ROOT\.<FileExtention>"
Параметр: default, значение: "<FileExtention>_auto_file"

2. "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\<FileExtention>\"
Параметр: default, значение: "<FileExtention>_auto_file"
3. Поискал ключ "<FileExtention>_auto_file", нашел:
"HKEY_CLASSES_ROOT\"<FileExtention>_auto_file\shell\open\command"
Параметр: default, значение: почему-то указывает на прогу, с которой этот тип файлов у меня был раньше ассоциирован (Wordpad)
4. "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.<FileExtention>\OpenWithProgids"
Параметр: default, значение: "<FileExtention>_auto_file"

Что тут к чему, не скажете?
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 03.01.2005 (Пн) 21:41

Sedge писал(а):1. Как приложение асоциировалось?
2. Какая именно ошибка?
3. Код, отвечающий за чтение командной строки и открытие файла можешь привести?

1. В проводнике: свойства файла, Opens With -> Change -> Choose the programm ...-> Browse
2. Error 52: "Bad file name or number". При вызове из командной -строки все в порядке.
3.
Код: Выделить всё
   
    StrArgument = Command()
   
    If Len(StrArgument) = 0 Then
        MainWindow.Show 'MDIForm
        Exit Sub
    End If
   
    If Len(Dir(StrArgument)) = 0 Then
        MainWindow.Show
    Else
        StrFileExtention = Right(StrArgument, 4)
        If StrFileExtention = ".als" Then
            'тут вызов стандарной процедуры чтения файла,
'которая юзается во всех случаях - в том числе
'при открытии через меню, через CTRL+O         
    End If

Скорее всего, конечно, руки мои кривые..
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 03.01.2005 (Пн) 21:53

Ага. Это функция Dir вылетает на ошибку.
Последний раз редактировалось Eugenio 03.01.2005 (Пн) 21:59, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 03.01.2005 (Пн) 21:54

Есть подозрение, что тебе в программу передается путь к файлу, заключенный в кавычки. Попробуй передавать своей функции чтения файла что-то вроде:
Код: Выделить всё
Replace(Command$, Chr(34), "")

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 03.01.2005 (Пн) 22:04

Sedge писал(а):Есть подозрение, что тебе в программу передается путь к файлу, заключенный в кавычки.

Именно! Спасибо!!! :lol:
Н-да, невнимательность - это порок.
Непонятно только вот что:
функция Dir без удаления кавычек отрабатывала нормально со всеми параметрами, кроме vbNormal, который и должен использоваться (я на всякий случай пробовал с тем же аргументом)

А про реестр расскажет кто-нибудь?
Есть ли у меня вопрос? У меня всегда есть вопрос


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 16

    TopList