powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellListView путь к дискам (мой компьютер)
7 сообщений из 7, страница 1 из 1
ShellListView путь к дискам (мой компьютер)
    #39760062
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, как программно перейти в раздел с дисками?
пробовал функицю
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
const CSIDL_DRIVES   = $0011;  

function GetSpecialPath(CSIDL: word): string;
var s:  string;
begin
  SetLength(s, MAX_PATH);
  if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
  then s := GetSpecialPath(CSIDL_APPDATA);
  result := PChar(s);
end;


ShellListView1.Root:=ExtractFileDir(GetSpecialPath(CSIDL_DRIVES));


Результат: папка AppData...

Как мне перейти к дискам?
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760067
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neРезультат: папка AppData...

Ну так ты же сам написал s := GetSpecialPath(CSIDL_APPDATA);

А за обращение к уже освобождённой памяти вообще надо руки отрывать. Кстати, ты же
прочитал в MSDN, что "this function is superseded by ShGetFolderPath"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760069
Фотография Tech N9ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Про апдата понял, в функции сменил
s := GetSpecialPath(CSIDL_APPDATA);
на s := GetSpecialPath(CSIDL);

пробую так ShellListView1.Root:=ExtractFileDir(GetSpecialPath(CSIDL_DRIVES));
программа крашится сразу.

Можно подробнее, насчет обращения к уже озвобождённой памяти ?
недопонимаю
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760105
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так
Код: pascal
1.
ShellListView1.Root := 'rfMyComputer';
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760123
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tech N9neпробую так ShellListView1.Root:=ExtractFileDir(GetSpecialPath(CSIDL_DRIVES));
программа крашится сразу.

Можно подробнее, насчет обращения к уже озвобождённой памяти ?
недопонимаю
Убери там вообще эту странную s: string, поставь там везде вместо нее Result.
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760142
Beltar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
result := PChar(s);



А почему у вас функция объявлена, как String?
...
Рейтинг: 0 / 0
ShellListView путь к дискам (мой компьютер)
    #39760294
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExtractFileDir для CSIDL_DRIVES? Вы не понимаете разницу между папками и каталогами .

TShellListView.Root принимает каталог, а не папку. Для папки там используется свойство TShellListView.RootFolder. (Могу ошибаться, но оно вроде только для чтения.)

Чтобы задать папку, у TShellListView есть:
Код: pascal
1.
2.
3.
4.
5.
6.
type
  TRootFolder = (rfDesktop, rfMyComputer, rfNetwork, rfRecycleBin, rfAppData,
    rfCommonDesktopDirectory, rfCommonPrograms, rfCommonStartMenu, rfCommonStartup,
    rfControlPanel, rfDesktopDirectory, rfFavorites, rfFonts, rfInternet, rfPersonal,
    rfPrinters, rfPrintHood, rfPrograms, rfRecent, rfSendTo, rfStartMenu, rfStartup,
    rfTemplates);



И делать надо так:
Код: pascal
1.
ShellListView.Root := 'rfMyComputer';
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellListView путь к дискам (мой компьютер)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]