ShellExecute и запуск файла с неизвестным расширением

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

ShellExecute и запуск файла с неизвестным расширением

Сообщение Pantalone » 18.08.2006 (Пт) 17:16

Файл у нас запускается так:
ShellExecute(frm.hWnd, "open", Path, vbNullString, vbNullString, SW_SHOWNORMAL)
Но запускается он только если его расширению сопоставлено какой-то приложение. А если нет, то как открыть окно для выбора программы в которой откроется файл, такое какое открывает винда?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 18.08.2006 (Пт) 17:22

А как ты собираешься открыть файл неизвестным приложением? Задачу поставь нормально... Или всё-таки это "иди туда не знаю куда, неси то, не знаю чего"?

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 18.08.2006 (Пт) 17:41

Посмотри у себя в системе файлы без определенной иконки. Т.е. с иконкой которая присваивается файлу если он не связан ни с каким приложением. Когда ты по такому файлу кликаешь открывается окошко со списком программ, среди которых можешь выбрать ту через которую откроется файл. Не ужели ни разу не видел?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 18.08.2006 (Пт) 21:19

Мля! Так бы и сказал. Так, предположим есть горка файлов с расширение (предположим) *.MyFile .
1. Ты хочешь назначить (для открытия) для них свою прогу.
2. Ты хочешь сделать так, чтобы когда в проге открывали файл он "видеелся". (например, ты написал php редактор, и когда ты тащишь php-файл на прогу, то прога открывалась не с "чистым листом", а с файлом).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.08.2006 (Пт) 21:38

Debugger, ты всё ещё не въехал.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 18.08.2006 (Пт) 23:01

Да, со внятным объяснением у меня туго, сорри ребята.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 22.08.2006 (Вт) 9:28

Я конечно могу ошибаться, но по-моему он говорит про OpenAs_RunDLL...
Ну посмотри, КАК открывается окно "Открыть с помощью..."
У меня так:
rundll32.exe C:\WINDOWS\system32\shell32.dll,OpenAs_RunDLL c:\testfile.testext
где testfile.testext - файл с неопознанным расширением

Разумеется, никто не мешает тебе запустить это окно самостоятельно - через VB Shell или API ShellExecute...
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 22.08.2006 (Вт) 10:26

Pantalone писал(а):Да, со внятным объяснением у меня туго, сорри ребята.
Да ну, все там понятно было ;)
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 24.08.2006 (Чт) 8:03

Ну что, с OpenAs разобрался?
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 24.08.2006 (Чт) 12:58

Да.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 25.08.2006 (Пт) 12:47

Вот, нашёл одну занятную (по-моему) статью - пробежал глазами, вроде всё там есть... особенно
There are seven verbs, called canonical verbs, whose meaning is automatically recognized by the shell: open, find, explore, print, printto, openas, and properties.

Проверял лично, что эти команды работают с ShellExecuteEx.
То есть, никто не обязывает тебя запускать Rundll32 - можно всё взвалить на систему ))
Declare функции OpenAs_RunDLL не прокатило (Bad Calling Convention) (а жаль).
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.08.2006 (Пт) 14:18

zHackLeX писал(а):Declare функции OpenAs_RunDLL не прокатило (Bad Calling Convention) (а жаль).

Потому что объявить нужно правильно.
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 26.08.2006 (Сб) 12:09

...потому что bad dll calling convention.
А как правильно объявить?

Rem Спорить не буду, не знаю.

Да. Зачитался статьёй, да ссылку забыл :D
http://www.oreilly.com/catalog/vbshell/chapter/ch04.html
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.08.2006 (Сб) 14:14

Ты-то как объявил? :-)
Изображение

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 29.08.2006 (Вт) 10:34

Ну... как интуиция подсказала

...lib "shell32.dll" (ByVal FileName As String)

Пробовал также

...lib "shell32.dll" (ByVal FileName As String, ByVal dwReserved as Long)
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.08.2006 (Вт) 10:46

Интуиция подвела.
надо ...lib "shell32.dll" (ByVal hwnd As Long, ByVal hinst As Long, ByVal lpszCmdLine As String, ByVal nCmdShow As Long)
причём это не Function, а Sub.

Источник: http://support.microsoft.com/kb/q164787/
Изображение


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

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

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

    TopList