Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 00:05   #1
VVkSoft
Пользователь
 
Аватар для VVkSoft
 
Регистрация: 06.09.2009
Сообщений: 66
По умолчанию Идентификация тома Windows

Здравствуйте.

Пишу программу для коллекции записей с диктофона.

Принцип работы: соединяем устройство и программа регистрирует записи в базе. Устройство нужно зарегистрировать в программе - то есть наименование путь к файлам записи и другие данные. Устройство программа должна распознать имея какой то уникальной идентификатор и потом программа уже "знает" путь к файлам записи и регистрирует их.

Не могу решить задачу:
Обще не имею понятия как в Windows кроме буквы и метки(Наименования) логического диска можно их различать.
Возможно каждой том иметь идентификатор? Как тогда считать?

Также надо (в основном) идентифицировать флешь накопители (подсоединены через кардридер и т.п.)

Спасибо всем за помощь
VVkSoft вне форума
Старый 30.01.2013, 00:12   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Посмотрите исходник TDriveComboBox там есть получение списка жестких дисков и их типов, определите свой тип диска устройства(dtRemovable скорее всего) на диске создате файл с именем. Имя должно быть уникальное чтобы ваше ПО находя этот файл в списке дисков определяло что этот диск - и есть ваше устройство(Ситуация когда в ПК 4 влешки , 1 жесткий диск и ещё хреналион сменныхносителей).
Человек_Борща вне форума
Старый 30.01.2013, 00:30   #3
VVkSoft
Пользователь
 
Аватар для VVkSoft
 
Регистрация: 06.09.2009
Сообщений: 66
По умолчанию

Спасибо.
Но как вариант хотел бы исключить запись файла в корень диска дабы не мусорить
Возможно есть какой либо идентификатор в каждом логическом томе?
VVkSoft вне форума
Старый 30.01.2013, 00:35   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Да боже мой, где угодно создайте файл, лишь бы FileExists, true выдало.

Цитата:
Возможно есть какой либо идентификатор в каждом логическом томе
Самое простое -метка тома.
Если вы любите геморой, копайте в даль получения информации об устройстве(модель, номер, серия и т.д. и т.п.).

Но файл на томе куда проще, да и вы его спрятать можете.
Человек_Борща вне форума
Старый 30.01.2013, 00:42   #5
VVkSoft
Пользователь
 
Аватар для VVkSoft
 
Регистрация: 06.09.2009
Сообщений: 66
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Если вы любите геморой, копайте в даль получения информации об устройстве(модель, номер, серия и т.д. и т.п.).
Если геморрой не велик то хотелось попробовать
Как вариант

Вроде геморрой не велик:
Спомнил про старой DelpfiWorld и там все есть:
Вар1
Код:
function GetVolumeInfoFVS(const Dir:string;
var FileSystemName,VolumeName:string;var Serial:longint):boolean;
{Получение информации о диске
Dir - каталог или буква требуемого диска
FileSystemName - название файловой системы
VolumeName - метка диска
Serial - серийный номер диска
В случае ошибки функция возвращает false}
var
  root:pchar;
  res:longbool;
  VolumeNameBuffer,FileSystemNameBuffer:pchar;
  VolumeNameSize,FileSystemNameSize:DWord;
  VolumeSerialNumber,MaximumComponentLength,FileSystemFlags:DWORD;
  s:string;
  n:integer;
begin
  n:=pos(':',Dir);
  if n> 0 then s:=copy(Dir,1,n+1) else s:=s+':';
  if s[length(s)]=':' then s:=s+'\';
  root:=pchar(s);
  getMem(VolumeNameBuffer,256);
  getMem(FileSystemNameBuffer,256);
  VolumeNameSize:=255;
  FileSystemNameSize:=255;
  res:=GetVolumeInformation(Root,VolumeNameBuffer,VolumeNameSize
  ,@VolumeSerialNumber,
  MaximumComponentLength, FileSystemFlags
  ,FileSystemNameBuffer,FileSystemNameSize);
  Result:=res;
  VolumeName:=VolumeNameBuffer;
  FileSystemName:=FileSystemNameBuffer;
  Serial:=VolumeSerialNumber;
  freeMem(VolumeNameBuffer,256);
  freeMem(FileSystemNameBuffer,256);
end;
вар2
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  VolumeName,
  FileSystemName : array [0..MAX_PATH-1] of Char;
  VolumeSerialNo : DWord;
  MaxComponentLength,FileSystemFlags: Cardinal;
begin
  GetVolumeInformation('C:\',VolumeName,MAX_PATH,@VolumeSerialNo,
  MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH);
  Memo1.Lines.Add('VolumeName = '+VolumeName);
  Memo1.Lines.Add('SerialNo = $'+IntToHex(VolumeSerialNo,8));
  Memo1.Lines.Add('CompLen = '+IntToStr(MaxComponentLength));
  Memo1.Lines.Add('Flags = $'+IntToHex(FileSystemFlags,4));
  Memo1.Lines.Add('FSName = '+FileSystemName);
end;
Попробую и отпишусь

Последний раз редактировалось Stilet; 30.01.2013 в 09:25.
VVkSoft вне форума
Старый 30.01.2013, 17:45   #6
VVkSoft
Пользователь
 
Аватар для VVkSoft
 
Регистрация: 06.09.2009
Сообщений: 66
По умолчанию

Разобрался.
Читает серийный номер тома а потом дело техники.
Всем спасибо за ответы.
Тему можно закрывать.
VVkSoft вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка тома диска president_ml Windows 0 24.09.2012 20:22
серийный номер тома..? kta87 Win Api 5 19.03.2012 19:13
WINRAR - разбивка на тома в % barabash Софт 9 19.05.2011 10:09
по букве тома определить физический серийный номер накопителя, а не номер тома @лександр Помощь студентам 6 23.09.2010 15:05