Помощь - Поиск - Пользователи - Календарь
Полная версия: Получение имени и иконки съемного драйва..
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Unconnected
..и установка последней в качестве иконки своей программе (есть буква флешки или другого съемного носителя). Имя так получаю:

function getdname(d:string):string; //d-буква диска формата F:\
var
VolumeName,FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength,FileSystemFlags : longword;
begin
result:='';
if GetVolumeInformation(PChar(D),VolumeName,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,FileSystemName,MAX_PATH) then result:=VolumeName;
end;


, но этот код меня смущает, прототип функции GetVolumeInformation другой в плане типов входных параметров, там LPSTR всякие..
А проверяю, подключился ли новый флеш,так:

function getnewdrive:string;
var i:char;
begin
result:='';
for i:='A' to 'Z' do
if Getdrivetype(pchar(i+':\'))=DRIVE_REMOVABLE then begin
if not(i in drives) then begin
result:=i+':\';
break;
end;
end;
end;
IUnknown
Цитата
А проверяю, подключился ли новый флеш,так:
В MSDN есть пример определения подключения/отсоединения устройств: Detecting Media Insertion or Removal

Или у тебя опять безоконное приложение?
Unconnected
У меня оттуда и работает пример, только на делфи, событие подключения отлавливается. То есть, при запуске проги я записываю в множество drives буквы флешек, воткнутых в данный момент, и при срабатывании события подключения новой - ищу, какая буква ей присвоилась.. меня интересует правильность процедуры, которая имя получает.
IUnknown
Цитата
У меня оттуда и работает пример
и
Цитата
при запуске проги я записываю в множество drives буквы флешек, воткнутых в данный момент, и при срабатывании события подключения новой - ищу, какая буква ей присвоилась
- это взаимоисключающие утверждения. Вся прелесть WM_DEVICECHANGE + DBT_DEVICEARRIVAL - в том, что тебе не надо искать, какая буква добавилась, тебе об этом сообщают одним из параметров, достаточно набор бит перевести в букву... Ну, хочешь так - делай так... Мне-то что...

С getdname проблем не видно. Ну, разве что (все равно ты не используешь предпоследний параметр, название ФС) сделать так:
function getdname(D : string) : string;
var
VolumeName : array [0 .. MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength, FileSystemFlags : LongWord;
begin
result := '';
if GetVolumeInformation(PChar(D), VolumeName, MAX_PATH,
@VolumeSerialNo, MaxComponentLength, FileSystemFlags, nil, 0) then
result := VolumeName;
end;
Unconnected
Цитата
достаточно набор бит перевести в букву

Ага, я это знал, просто не сообразил как перевести) Нашёл рабочий, в общем.
Ещё можно вопрос не по теме, где найти ключи в реестре, отвечающие за свойства папок? Хотя бы "скрывать\показывать расширения зарегистрированных...", весь гугл перерыл..
IUnknown
Вот тут, насколько я понимаю (HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced):
Unconnected
Спасибо, все настройки там) А в сети какие-то страшные ветки..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.