Запуск файла соотв. программой

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Запуск файла соотв. программой

Сообщение Алексей К. » 18.01.2005 (Вт) 15:46

К примеру есть:
имя_файла_с_путем="c:\text.doc"
имя_файла_с_путем1="c:\tabl.xls"
имя_файла_с_путем2="c:\img.dwg"
Можно ли и как сделать загрузку этих файлов из проги VB. Т.е. нажимаем кнопку, передаем имя файла и загружается программа соответствующая этому типу файла (будет загружаться word или excell и тд.). Типа shell имя_файла. Хочу свой мини-командер написать.
Если можно приведите пример кода.

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 18.01.2005 (Вт) 16:30

А чем тебя "shell имя_файла" не устраивает?

VOS
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 72
Зарегистрирован: 04.11.2004 (Чт) 18:01
Откуда: СПб

Сообщение VOS » 18.01.2005 (Вт) 16:35

Мне кажется, что просто при указании "shell имя_файла" должна открываться сопоставленная программа? Или нет?


[off]
Черт! меня опередили!
[/off]
- Папа, а правда, что форумы делают человека идиотом?
- Гыыы, лол, сынок!

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 18.01.2005 (Вт) 19:29

можно с помощью API
ShellExecute

'This example requires a command button (Command1)
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1
Const SE_ERR_NOASSOC = 31
Const sOperation As String = "open" ' Constants for shell operations
Const sRun As String = "RUNDLL32.EXE"
Const sParameters As String = "shell32.dll,OpenAs_RunDLL "
Private Function shelldoc(sfile As String)
Dim sPath As String, RetVal As Long, _
lRet As Long
lRet = ShellExecute(GetDesktopWindow(), sOperation, sfile, _
vbNullString, vbNullString, SW_SHOWNORMAL)
If lRet = SE_ERR_NOASSOC Then ' No association exists
'Create a buffer
sPath = Space(255)
'Get the system directory
RetVal = GetSystemDirectory(sPath, 255)
'Remove all unnecessary chr$(0)'s
'and move on the stack
sPath = Left$(sPath, RetVal)

lRet = ShellExecute(GetDesktopWindow(), "open", sRun, _
sParameters + sfile, sPath, SW_SHOWNORMAL)
End If
End Function
Private Sub Command1_Click()
Call shelldoc("C:\myfile.txt")
End Sub

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 18.01.2005 (Вт) 21:05

VOS писал(а):Мне кажется, что просто при указании "shell имя_файла" должна открываться сопоставленная программа? Или нет?


[off]
Черт! меня опередили!
[/off]

Увы, нет!
Моду создают модоки, а распространяют модозвоны.

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 18.01.2005 (Вт) 21:43

Я наверное опять что-то не так понял, но почему бы не просто вот так это делать:
Код: Выделить всё
ShellExecute Me.hwnd, "open", FileName, vbNullString, vbNullString, 1

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Сообщение Александр80 » 18.01.2005 (Вт) 22:33

:-) Тогда еще вот это...

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


XairOn - Так.... Кажется :?

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 19.01.2005 (Ср) 8:06

Всем спасибо, вариант ShellExecute работает нормально. Только когда нет файла в указанном пути - никаких ошибок не выдает, и когда неизвестное расширение (винда не знает его) как отловить диалоговое окно windows "открыть с помощью"?

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

Сообщение Eugenio » 19.01.2005 (Ср) 8:34

Типа, наверное, наиболее полная инфа про ассоциацию файлов (начало, дальше по ссылкам, наверно, можно отыскать полезное).
http://search.microsoft.com/search/results.aspx?qu=file+associations&View=msdn&st=b&c=0&s=1&swc=0
Есть ли у меня вопрос? У меня всегда есть вопрос


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList