Найти и выбрать файл в проводнике

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Найти и выбрать файл в проводнике

Сообщение alibek » 22.12.2003 (Пн) 14:55

Люди, подскажите как лучше сделать такую штуку.
В свойствах ярлыка есть кнопка "Найти объект". Если ее нажать, то будет открыта папка и в ней будет выбран определенный файл. Как сделать подобное программно?
Открыть папку можно через ShellExecute 0,"explore",path,... (path - путь к файлу). Передача имени файла, как параметра, результата не дает. Может для этих целей есть другая команда, чем "explore"?
Lasciate ogni speranza, voi ch'entrate.

_NeoN_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 14.08.2003 (Чт) 9:48
Откуда: Новосибирск

Сообщение _NeoN_ » 22.12.2003 (Пн) 20:29

эээм, если я не ошибаюсь то если explorer.exe вызвать с параметром он пойдет это как путь... только получится не совсем то что ты хотел, но все же решение =)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.12.2003 (Вт) 14:34

Точно! Спасибо :)
Мой склероз почему-то говорил, что эта функция работает через rundll32, а это функция самого explorer.
Код: Выделить всё
explorer /select,C:\WINDOWS\win.ini
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 26.02.2015 (Чт) 16:56

Только надо путь в кавычки брать:
Код: Выделить всё
Shell "explorer /select, """ & Filename & """"
иначе не будет работать с папками, в имени которых есть запятая (а в случае пробела будет).

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Найти и выбрать файл

Сообщение Хакер » 26.02.2015 (Чт) 17:14

Qwerty, 11 лет прошло.
Да и способ нехороший.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Найти и выбрать файл

Сообщение ger_kar » 26.02.2015 (Чт) 17:24

Хакер писал(а):Да и способ нехороший.
А чем он нехорош? Никакой "черной магии". Только использование стандартных возможностей. Может по другому и не получится.
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Найти и выбрать файл

Сообщение Хакер » 26.02.2015 (Чт) 17:39

ger_kar писал(а):А чем он нехорош?

Тем, что порождается новый процесс, единственный смысл которого — передача соответствующего COM-вызова другому процессу через RPC и последующая смерть.

ger_kar писал(а):Никакой "черной магии". Только использование стандартных возможностей

Дай ссылку на MSDN, где эта возможность документирована. Есть мнение, что такую статью ты не найдёшь. Причём, ничто не мешает людям в MS в один прекрасный день убрать поддержку этого ключика из исходников так, что ключик перестанет работать.

Зато есть метод IShellView::SelectItem. Помимо того, что его просто так (случайно или не совсем случайно) убрать нельзя (куча всего перестанет компилироваться), в документации на него в секции «Заметки» написано:
This method is used to implement the Target command from the File menu of the Shell shortcut property sheet.

То есть, буквально то, что кнопка «Найти объект» в диалоге свойств именно этот метод и использует. Напрямую.

Чего и советую делать всем, кто хочет получить функциональность, аналогичную кнопке «Найти объект».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 26.02.2015 (Чт) 17:40

Хакер писал(а):Qwerty, 11 лет прошло.

Хакер, вот свежий вопрос со ссылкой сюда.
Логичнее же тут написать, чем там.

Хакер писал(а):Да и способ нехороший.

Почему? Ага, ты уже ответил.

Хакер писал(а):Причём, ничто не мешает людям в MS в один прекрасный день убрать поддержку этого ключика из исходников так, что ключик перестанет работать.

Вроде бы ключи командной строки являются документированной функциональностью?
Да и не станут он - куча программ так делает.
Последний раз редактировалось Qwertiy 26.02.2015 (Чт) 17:41, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Найти и выбрать файл

Сообщение Хакер » 26.02.2015 (Чт) 17:40

Qwertiy писал(а):Почему?

Выше написал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 26.02.2015 (Чт) 17:44

Хакер писал(а):Дай ссылку на MSDN, где эта возможность документирована. Есть мнение, что такую статью ты не найдёшь.

Не совсем msdn, но http://support.microsoft.com/kb/152457.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Найти и выбрать файл

Сообщение Хакер » 26.02.2015 (Чт) 17:48

Qwertiy писал(а):Вроде бы ключи командной строки являются документированной функциональностью?

Документированной для пользователей (в хелпе Windows для пользователей) или для разработчиков? Это разные вещи. Очень разные. Если я ещё могу смутно припомнить, что где-то видел в каком-то встроенном в Windows хелпе упоминание этих ключей, то я не видел, чтобы в доках для разработчиках было сказано, что это можно невозбранно юзать.

Кроме того, если мы окажемся в экзотической ситуации, где бинарник explorer-а переименован, мой способ сработает, а твой — нет.

Да и зачем порождать новый процесс, который сделает один вызов COM-метода и умрёт, если можно самому вызвать этот COM-метод? Смысл можно найти только в двух аспектах: если запускать ещё и с ключом /separate или если есть основания серьёзно опасаться, что хост-процесс проводника намертво подвис и вызов COM-метода заблокирует вызывающий (то есть наш) поток.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 26.02.2015 (Чт) 18:04

Хакер писал(а):Да и зачем порождать новый процесс, который сделает один вызов COM-метода и умрёт

С этим согласен.

Кстати, а если открытие папок в отдельных процессах включено в настройках?
Либо в качестве оболочки Windows используется не проводник?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Найти и выбрать файл в проводнике

Сообщение ger_kar » 26.02.2015 (Чт) 18:41

Да способ предложенный Хакером несомненно лучше, во всех отношениях. А под стандартной возможностью я подразумевал использование возможности заложенной в систему, т.к. оболочка есть часть этой системы. А по поводу документации я и не заморачивался :) .
Бороться и искать, найти и перепрятать

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Найти и выбрать файл в проводнике

Сообщение iGrok » 07.04.2015 (Вт) 0:22

А чем, кстати, плох не упомянутый здесь способ ILCreateFromPath -> SHOpenFolderAndSelectItems -> ILFree?
Он, вроде бы, несколько проще в реализации, чем развлечения с интерфейсами.
label:
cli
jmp label

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Найти и выбрать файл в проводнике

Сообщение ALX_2002 » 07.04.2015 (Вт) 0:56

iGrok, а это вариант разве не проще: http://bbs.vbstreets.ru/viewtopic.php?f=1&t=49032#p6778890 ?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Найти и выбрать файл в проводнике

Сообщение iGrok » 07.04.2015 (Вт) 1:49

ALX_2002 писал(а):iGrok, а это вариант разве не проще: http://bbs.vbstreets.ru/viewtopic.php?f=1&t=49032#p6778890 ?


А смотря, что нужно получить. Если не нужно двигать окно, то нет. Там примерно так получается (плюс объявления ф-ций, плюс CoInitialize, если не ошибаюсь):
Код: Выделить всё
  IIDL = ILCreateFromPath(FileName)
  SHOpenFolderAndSelectItems(IIDL, 0, 0, 0)
  ILFree(IIDL)
label:
cli
jmp label

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Re: Найти и выбрать файл в проводнике

Сообщение ALX_2002 » 07.04.2015 (Вт) 10:32

iGrok, пардон, я не на тот пример сослался: http://bbs.vbstreets.ru/viewtopic.php?f=1&t=48990#p6778889
Вроде бы получается кода меньше, а удобство управления окном больше ? И возможность переноса из VB6 в VBScript и другие языки есть. :roll:

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Найти и выбрать файл в проводнике

Сообщение iGrok » 07.04.2015 (Вт) 23:45

Ну, кода-то как раз больше, чем три строки, но не суть. Возможностей-то тоже больше. :)
label:
cli
jmp label


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

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

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

    TopList