Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Об открытии файлов в программе Добавлено: 15.03.10 21:16  

Автор вопроса:  iprog | Web-сайт: usprogs.atheo-club.ru
Здравствуйте. У меня такое дело: пишу код, который записывает в реестр настройки открытия файла в программе. Но, когда я запускаю программу, а потом пробую открыть такой файл (в Проводнике), то у меня появляется окно выбора программы для открытия этого файла. Я выбираю там свою программу, она запускается, но файл в ней не открывается. Скажите, пожалуйста, может ОС передаёт моей программе что-то об этом файле и если да, то подскажите, пожалуйста, какой код нужно написать для этого? Заранее спасибо.

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #1 Добавлено: 15.03.10 21:56
Элементарно. Открываеш Регэдит, в нём папку Hkey_Classes_Root тама выбираеш папку ,название которой является форматом файла, открываеш её ,и смотриш, что система может тебе рассказать об этом формате.

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 15.03.10 22:47
система передает в твою программу путь к файлу в качестве параметра командной строки. Командную строку возвращает функция Command$

Ответить

Номер ответа: 3
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #3
Добавлено: 16.03.10 21:49
Winand, спасибо! А эта функция возвращает только путь к Файлу? Как же узнать тогда имя файла?

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 17.03.10 01:08
я имею в виду полный путь с именем) мог бы и посмотреть сам

Ответить

Номер ответа: 5
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #5
Добавлено: 17.03.10 21:05
Я и посмотрел.
  1. Open Command$ For Input As #F
  2. txtMain.Text = Input$(LOF(1), 1)
  3. Close #1
  4. Do
  5. p = InStr(p + 1, txtMain.Text, ";")
  6. If p <> 0 Then n = InStr(p, txtMain.Text, Chr(13)) Else Exit Sub
  7. If n = 0 Then Exit Sub
  8. mword = Mid(txtMain.Text, p + 2, n - p - 2)
  9. txtMain.AddItem mword
  10. Loop


Этот код открывает запрашиваемый файл. А при запуске происходит ошибка: Плохое имя файла или номер. Код я написал в Form_Load.

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 18.03.10 00:03
так ты посмотри с помощью Debug.print Command$ что у тебя эта функция возвращает. Может ничего и не передается?

Ответить

Номер ответа: 7
Автор ответа:
 П.С.



ICQ: 225019134 

Вопросов: 36
Ответов: 41
 Web-сайт: psbatishev.narod.ru
 Профиль | | #7
Добавлено: 18.03.10 10:21
Если речь об ассоциации файла с программой, то вот код:

  1. Public Const HKEY_CLASSES_ROOT          As Long = &H80000000
  2. Private Const REG_SZ                    As Long = &H1
  3. Private Const KEY_READ                  As Long = ((&H20000 Or &H1 Or &H8 Or &H10) And (Not &H100000))
  4.  
  5. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  6.  
  7. Private Declare Function RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As String, ByVal cbData As Long) As Long
  8. Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
  9.  
  10. Public Function RegSetValue(ByVal hKey As Long, _
  11.                             ByVal strSubKey As String, _
  12.                             ByVal strKey As String, _
  13.                             ByVal strValue As String) As Long
  14. On Error GoTo 1
  15.     Call RegCreateKey(hKey, strSubKey, RegSetValue)
  16.     Call RegSetValueEx(RegSetValue, strKey, 0&, 1&, ByVal strValue & vbNullChar, Len(strValue) + 1&)
  17.     Call RegCloseKey(RegSetValue)
  18. 1:
  19. End Function
  20.  
  21.  
  22. 'Ассоциация файлов с программой
  23. Public Sub Associate(ByVal sType As String, ByVal sKey As String, ByVal sDescr As String, _
  24.                      ByVal iIcon As Integer, ByVal sPrompt As String)
  25. On Error GoTo 1
  26.     Call RegSetValue(HKEY_CLASSES_ROOT, sKey, vbNullString, sDescr)
  27.     If Len(sPrompt) Then Call RegSetValue(HKEY_CLASSES_ROOT, sKey & "\shell\open\command", vbNullString, sPrompt & " " & Chr(34) & "%1" & Chr(34))
  28.     Call RegSetValue(HKEY_CLASSES_ROOT, sKey & "\DefaultIcon", vbNullString, App.Path & "\" & LCase(App.EXEName) & ".exe," & CStr(iIcon))
  29.     Call RegSetValue(HKEY_CLASSES_ROOT, sType, vbNullString, sKey)
  30. 1:
  31. End Sub

Ответить

Номер ответа: 8
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #8
Добавлено: 18.03.10 18:21
Winand, я посмотрел, что эта функция возвращает путь и имя файла, но возвращает вот так:
D:\МОИ ДОК~1\ИЛЬЯ\ПРОГРА~1\V.6745~B\ и т.д. Из-за этого и не работает: оператор OPEN открыть файл по такому пути не может.

П.С.:
Я писал такой код:
  1. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  2. 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
  3. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  4. Private Const HKEY_CLASSES_ROOT = &H80000000
  5.  
  6. Private Sub AssociateMyApp(ByVal sAppName As String, ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String)
  7.     Dim lRegKey As Long
  8.     Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
  9.     Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
  10.     Call RegCloseKey(lRegKey)
  11.     Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey)
  12.     Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
  13.     Call RegCloseKey(lRegKey)
  14.     If Len(sIcon) Then
  15.         Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey)
  16.         Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon))
  17.         Call RegCloseKey(lRegKey)
  18.     End If
  19. End Sub

Хотя, по-моему, это то же самое, что написали Вы.

Ответить

Номер ответа: 9
Автор ответа:
 П.С.



ICQ: 225019134 

Вопросов: 36
Ответов: 41
 Web-сайт: psbatishev.narod.ru
 Профиль | | #9
Добавлено: 18.03.10 20:59
Извини, я не специалист по API и реестру. С этим кодом мне тоже помогли, я просто убрал лишнее. Могу сказать однозначно, что в моих программах он работает следующим образом: при запуске программы автоматически выполняется этот код, затем программу можно закрыть. Впоследствии, при двойном щелчке по файлу, с указанным в этом коде расширением файла, открывается моя программа, и ей в качестве параметра командной строки передается имя файла, его программа "вылавливает" с помощью VBA.Command

Ответить

Номер ответа: 10
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #10
Добавлено: 19.03.10 02:11
Ilya, странно что получается путь в таком виде. Хотя более странно, что Open его не воспринимает. Это ж обычный досовский формат 8.3

Ответить

Номер ответа: 11
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #11
Добавлено: 22.03.10 20:24
Winand, извините, но в каком виде Вы получали путь, передаваемый функцией Command$?
П.С.: у меня VBA.Command передает путь в таком же виде, что и Command$.

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 22.03.10 22:45
ну вот в таком
"F:\Мои документы\BACKUP!\Cowon S9\COWON_S9_2.52.zip"

Ответить

Номер ответа: 13
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #13
Добавлено: 24.03.10 21:05
Кстати, у меня в полученном моей программой пути было "обрублено" расширение файла. В смысле, было расширение в 4 символа (без точки), а в этом пути было только первые 3 символа.

Ответить

Номер ответа: 14
Автор ответа:
 iprog



Вопросов: 26
Ответов: 110
 Web-сайт: usprogs.atheo-club.ru
 Профиль | | #14
Добавлено: 25.03.10 18:39
Может, вид пути зависит от операционной системы?

Ответить

Номер ответа: 15
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 25.03.10 20:19
Ilya, это формат ВОСЕМЬ.ТРИ
там всегда 8 символов в имени и 3 в расширении. Но по идее это должно нормально пониматься операционкой

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам