Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Метки дисков   Найти похожие ветки 

 
Bartov   (2003-03-20 05:55) [0]

Hi, всем.
Возникла проблема.
Как можно узнать о том, что изменилась метка диска.
Есть ли какой-нибудь wm_xxx, с помощью которого можно отслеживать их изменения, а то через таймер не охото проверять.
Или как можно сделать это красиво?

Спасибо.


 
Bartov   (2003-03-20 14:35) [1]

Мда... Что-то все молчат ;-(


 
Игорь Шевченко   (2003-03-20 14:56) [2]

Молчат, потому что нету WM_xxxxx. Даже WM_DEVICECHANGE не пошлется. И среди Volume management functions нет никаких Notifications. А Device какой - removable или нет ? Потому как для Removable WM_DEVICECHANGE посылается при смене тома.


 
Bartov   (2003-03-20 15:48) [3]

> А Device какой - removable или нет ? Потому как для Removable WM_DEVICECHANGE посылается при смене тома.
Хочу винт отловить.
Не уж-то таймер вешать?...

> Даже WM_DEVICECHANGE не пошлется
На WM_DEVICECHANGE я повесил обновление списка с усройствами, если добавлено/удалено устройство (тип volome) и так же CD/DVD всунули/высунули - вот здесь метка и поменялась. ;-)
А вот и примерчик откуда брал:
http://delphikol.narod.ru/project_jedi/Dbt.zip


 
Игорь Шевченко   (2003-03-20 16:22) [4]

Bartov (20.03.03 15:48)

У винта таймер вешать. А как часто у винта метка тома меняется ?


 
Bartov   (2003-03-20 17:06) [5]

Не часто, спору нет.
Думаю интервал в 3 секунды будет достаточен.
Хотя Эксплорер как-то обрабатывает это изменение, если даже окно не активно, т.е. на заднем фоне.

Вот всем знакомая ф-ция получения метки тома, но вней два недостатка:

var
NotUsed: DWORD;
Buf: array [0..MAX_PATH - 1] of Char;
begin
Buf := #0;
GetVolumeInformation(PChar(Drv + "\\"), Buf, DWORD(SizeOf(Buf)), nil, NotUsed, NotUsed, nil, 0);
Result := Buf;
end;

1. Если сделать Drv + "\", то не всегда под Виндой 9х будет отображаться правильно, под XP все нормально.
2. Возращает Дос метку, т.е. не учитывает регистр букв.
Эту ф-цию реально использовать только для того, чтобы проверить есть ли на самом деле метка или нет, т.е. String <>"".

А вот варинат как получить Виндовую метку:

var
NotUsed: DWORD;
SFI: TShFileInfo;
begin
FillChar(SFI, SizeOf(SFI), 0);
ShGetFileInfo(PChar(Drv + "\"), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME);
Result := SFI.szDisplayName;

if Result = "" then //== Для Win9x, когда нет меток дисков
Result := "<none>"
else if Pos("(", Result) <> 0 then
SetLength(Result, Pos("(", Result) - 2);
end;

И работает на ура.


 
Игорь Шевченко   (2003-03-20 17:16) [6]


> Эксплорер как-то обрабатывает это изменение

Поищи по undocumented Shell, там весьма вероятно может быть, но оно сильно зависит от версии Shell32.dll


 
Bartov   (2003-03-21 07:43) [7]

Ладно, закрываю тему.
Если найду как лучше, то напишу...


 
Bartov   (2003-03-22 09:40) [8]

Из MSDN 2002
ms-help://MS.MSDNQTR.2002JUL.1033/devio/deviceman_9z77.htm

Смотри
GUID_IO_VOLUME_CHANGE - The volume label has changed.


 
Bartov   (2003-03-22 11:03) [9]

SetVolumeLabel - устанавливает ДОС метки, т.е. в верхнем регистре, а как тогда сделать чтоб было System, а не SYSTEM?



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-59799
Barmutik
2003-05-06 14:27
2003.05.19
Помогите с TToolBar и 8-bit alpha


3-59605
Анатолий
2003-04-28 14:38
2003.05.19
Копировать поле типа


1-59686
ODINUS
2003-05-07 16:42
2003.05.19
Аccess


1-59798
TALLA_
2003-05-07 08:14
2003.05.19
Как приспособить строки из макроса Excel в Delphi, через OLE


4-59987
QUE
2003-03-19 16:14
2003.05.19
Вставить текст в чужое окно, только что обсуждалось, но не совсем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский