Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
143 / 122 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
1

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

06.11.2012, 00:49. Показов 2574. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, по нажатию на кнопку открывается каталог с файлом в проводнике, для того чтобы пользователь не искал вручную файл по названию есть идея выделять сразу этот файл в проводнике.
Возможно ли в проводнике зная имя и путь выделить файл?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2012, 00:49
Ответы с готовыми решениями:

Открыть указанный файл в проводнике
Добрый день! Нужно открыть папку, в которой будет выделен указанный файл. Пытался так, но он...

Выделить файл в папке
Доброго времени суток, у меня есть FilelistBox, в нем храняться адреса типа...

Построение дерево каталогов и файлов как в проводнике - Что является корнем?
Есть ф-ция поиска файлов и каталогов, и построение дерева... void TfLocal::CreatePath(String...

Выделить файлы в проводнике и передать на Web-страницу
Расскажите пожалуйста где можно почитать о создании именно такой вещи, ну или просто подскажите...

5
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
06.11.2012, 01:10 2
C++
1
2
String f_name = "H:\\hdd.png";
ShellExecute(Handle, "open", "explorer.exe", String("/select, " + f_name).c_str(), NULL, SW_SHOWNORMAL);
2
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.11.2012, 01:47 3
Ухты.. не знал... +1

Только тут с Unicod-ом могут быть проблемы:

C++
1
2
3
4
5
6
7
8
AnsiString f_name = "H:\\hdd.png";
 
ShellExecuteA(Handle, 
            "open",
            "explorer.exe",
            AnsiString("/select, " + f_name).c_str(),
            NULL,
            SW_SHOWNORMAL);
1
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,879
Записей в блоге: 1
06.11.2012, 14:10 4
А в диспетчере ведь новый explorer.exe каждый раз появляется
0
518 / 306 / 58
Регистрация: 30.07.2008
Сообщений: 607
06.11.2012, 16:18 5
Цитата Сообщение от kzru_hunter Посмотреть сообщение
А в диспетчере ведь новый explorer.exe каждый раз появляется
а это уже в настройках ОС назначается... вроде "Открывать каждый раз в новом окне" - как то так, в св-вах проводника вроде.
0
1123 / 794 / 101
Регистрация: 01.02.2011
Сообщений: 1,879
Записей в блоге: 1
07.11.2012, 12:02 6
Цитата Сообщение от Gremlin Посмотреть сообщение
вроде "Открывать каждый раз в новом окне"
мб "запускать окна с папками в отдельном процессе"? Если да, то галки нету.

Добавлено через 12 минут
Есть другой способ (по крайней мере в autoit'е), с которым нет такой проблемы.

Добавлено через 18 часов 47 минут
Gremlin
Какая у Вас ОС? Я на виртуалках (win2000, winxp, 7-ки нету) проверил, такой проблемы нет. Но в предустановленной на ноут Windows7 x64 Home Basic, обновленной до Service Pack 1, такая проблема есть.

Цитата Сообщение от kzru_hunter Посмотреть сообщение
Есть другой способ (по крайней мере в autoit'е), с которым нет такой проблемы.
Там идет обращению к SysListView32. В windows7 вместо SysListView32 стоит DirectUIHWND, для которого нет документации. Так что отбрасывается этот способ.

Нашел еще один способ, но пришлось переделать, т.к. в XE не линкуется из-за некоторых функций, а 6-й билдер не знает функции ILCreateFromPathPTR и ILFree, поэтому пришлось переделать. К сожалению, этот способ не работает в windows 2000, но должен работать начиная с XP. К сожалению на виртуальной ОС с XP все же не работает (Ошибка: разрушительный сбой). Приведу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    typedef HRESULT (__stdcall *SHOpenFolderAndSelectItemsPTR)(ITEMIDLIST *pidlFolder,
                                          UINT cidl,
                                          const ITEMIDLIST **apidl,
                                          DWORD dwFlags);
 
    typedef ITEMIDLIST* (__stdcall *ILCreateFromPathPTR)(PCTSTR pszPath);
        typedef void (__stdcall *ILFreePTR)(ITEMIDLIST *pidl);
 
 
    HINSTANCE hDLL = LoadLibrary("shell32.dll");
    SHOpenFolderAndSelectItemsPTR MySHOpenFolderAndSelectItems = (SHOpenFolderAndSelectItemsPTR)GetProcAddress(hDLL, "SHOpenFolderAndSelectItems");
    ILCreateFromPathPTR MyILCreateFromPath = (ILCreateFromPathPTR)GetProcAddress(hDLL, "ILCreateFromPathA");
        ILFreePTR MyILFree = (ILFreePTR)GetProcAddress(hDLL, "ILFree");
 
    //*
    // Directory to open
    ITEMIDLIST *dir = MyILCreateFromPath("C:\\");
 
    // Items in directory to select
    ITEMIDLIST *item1 = MyILCreateFromPath("C:\\Program Files\\");
    ITEMIDLIST *item2 = MyILCreateFromPath("C:\\Windows\\");
    const ITEMIDLIST* selection[] = {item1, item2};
    UINT count = sizeof(selection) / sizeof(ITEMIDLIST);
 
    // Perform selection
    MySHOpenFolderAndSelectItems(dir, count, selection, 0);
 
        MyILFree(dir);        
        MyILFree(item1);
        MyILFree(item2);
 
        FreeLibrary(hDLL);
}
1
07.11.2012, 12:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2012, 12:02
Помогаю со студенческими работами здесь

Не открывается файл в проводнике
Добрый день. Столкнулся с такой проблемой. После того как начал прикручивать БД через php к...

Показать файл в проводнике
Подскажите пожалуйста, почему не работает функция SHOpenFolderAndSelectItems? При вызове ничего не...

Осуществить открытие файла в программе, выбирая сам файл в проводнике
Нужно осуществить открытие файла в программе, тыкая на сам файл. К примеру: Показ фото, при нажатие...

Как представить записи в виде элементов дерева(как в проводнике)
Помогите!!!!!!!!!!!!!!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru