Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Перечислить буквы на винчестере   Найти похожие ветки 

 
Andr-04   (2005-08-07 11:21) [0]

Как определить буквы локальных дисков в системе, которые принадлежат определённому винчестеру? Или определить винчестер (его название, серийный номер или что-либо ещё), на котором располагается определённый локальный диск (например, C:)?


 
Andr-04   (2005-08-07 19:47) [1]

Неужели никто не знает???


 
3DxFantastika ©   (2005-08-07 19:52) [2]

По дискам инфа была:
http://home.earthlink.net/~akonshin/


 
Andr-04   (2005-08-07 20:34) [3]

Там того, что нужно, нету...


 
Andr-04   (2005-08-07 20:46) [4]

Удалено модератором


 
Andr-04   (2005-08-07 22:38) [5]

Удалено модератором
Примечание: Не надо спамить


 
GanibalLector ©   (2005-08-07 23:27) [6]

Вот,мой код 2 годичной давности ;) Попрошу без комментариев(они уже были). Менять принципиально ничего не буду!!!

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

const
DriveConst: array[1..26] of DWord =
   ($1,       $2,       $4,      $8,
    $10,      $20,      $40,     $80,
    $100,     $200,     $400,    $800,
    $1000,    $2000,    $4000,   $8000,
    $10000,   $20000,   $40000,  $80000,
    $100000,  $200000,  $400000, $800000,
    $1000000, $2000000);

type
 TForm1 = class(TForm)
   ComboBox1: TComboBox;
   Label1: TLabel;
   Bevel1: TBevel;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure ComboBox1Change(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

 
var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var QQ,i:DWord;
begin
QQ:=GetLogicalDrives();
for i:=1 to 26 do
if (QQ and DriveConst[i])>0 then
Combobox1.Items.Add(chr($40+i)+":\");
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var st:string;
VolumeName,FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNumber,MaximumComponentLength,FileSystemFlags:DWord;
SectorsPerCluster,BytesPerSector,NumberOfFreeClusters,TotalNumberOfClusters:DWord;
begin

SetErrorMode(SEM_FAILCRITICALERRORS);

case GetDriveType(PChar(Combobox1.Text)) of
0:                st:="Type :"+chr(09)+chr(09)+chr(09)+"Unknown"+#10#13;
1:                st:="Type :"+chr(09)+chr(09)+chr(09)+"No_ROOT_DIR"+#10#13; // if RootPathName=nil
DRIVE_REMOVABLE:  st:="Type :"+chr(09)+chr(09)+chr(09)+"Flopy"+#10#13;
DRIVE_FIXED:      st:="Type :"+chr(09)+chr(09)+chr(09)+"Hard"+#10#13;
DRIVE_REMOTE:     st:="Type :"+chr(09)+chr(09)+chr(09)+"Remote"+#10#13;
DRIVE_CDROM :     st:="Type :"+chr(09)+chr(09)+chr(09)+"CD-ROM"+#10#13;
DRIVE_RAMDISK:    st:="Type :"+chr(09)+chr(09)+chr(09)+"RAM-Disk"+#10#13;end;
st:=st+#10#13;

if GetVolumeInformation(Pchar(Combobox1.Text),VolumeName,MAX_PATH,
@VolumeSerialNumber,MaximumComponentLength,FileSystemFlags,FileSystemName,MAX_PATH)=true  then
       begin
st:=st+"Name :"       +chr(09)+chr(09)+chr(09)+VolumeName+#10#13;
st:=st+"Serial :"     +chr(09)+chr(09)+chr(09)+inttohex(VolumeSerialNumber,8)+#10#13;
st:=st+"Length :"     +chr(09)+chr(09)        +inttostr(MaximumComponentLength)+#10#13;
st:=st+"File system :"+chr(09)+chr(09)        +FileSystemName+#10#13;
       end
else st:=st+"Drive not ready"+#10#13; //ShowMessage(SysErrorMessage(GetLastError));
st:=st+#10#13;

if GetDiskFreeSpace(Pchar(Combobox1.Text),SectorsPerCluster,
BytesPerSector,NumberOfFreeClusters,TotalNumberOfClusters)=true then
       begin
st:=st+"SectorsPerCluster :"+chr(09)+inttostr(SectorsPerCluster)+#10#13;
st:=st+"BytesPerSector : "+chr(09)+inttostr(BytesPerSector)+#10#13;
st:=st+#10#13;
st:=st+"FreeClusters : "+chr(09)+chr(09)+inttostr(NumberOfFreeClusters)+#10#13;
st:=st+"BusyClusters :"+chr(09)+chr(09)+inttostr(TotalNumberOfClusters-NumberOfFreeClusters)+#10#13;
st:=st+"TotalClusters :"+chr(09)+chr(09)+inttostr(TotalNumberOfClusters)+#10#13;
st:=st+#10#13;
st:=st+"FreeBytes :"+chr(09)+chr(09)+inttostr(NumberOfFreeClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
st:=st+"Busy :"+chr(09)+chr(09)+chr(09)+inttostr(TotalNumberOfClusters*(Int64(BytesPerSector*SectorsPerCluster))-
NumberOfFreeClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
st:=st+"TotalBytes :"+chr(09)+chr(09)+inttostr(TotalNumberOfClusters*(Int64(BytesPerSector*SectorsPerCluster)))+#10#13;
       end;

messagedlg(Pchar(st),MtInformation,[MbOk],0);
end;
     
end.



 
Andr-04   (2005-08-08 08:32) [7]

Приведённый код возвращает информацию (в т.ч. сер. номер) для каждого локального диска как раздела, а не винчестера в целом, на котором располагается данный раздел! Поэтому данный код, к сожалению, не подходит... Вообще, GetVolumeInformation (используется в данном коде) к винчестеру отношения не имеет! Надо именно связать разделы винчестера (точнее, их буквы в системе) с винчестером, на котором они все располагаются (например, если подключено 2 винчестера, то одна группа локальных дисков (например, C:\, D:\, E:\) будет возвращать имя и сер. номер (или др. информацию - не важно) одного винчестера, а другая группа локальных дисков (например, F:\, G:\) будет возвращать имя и сер. номер (или др. информацию - не важно) другого винчестера). Или же для каждого винчестера отдельно определить все буквы в системе, назначенные каждому из его разделов (само расположение разделов не важно - важен лишь сам факт их принадлежности).


 
Lamer@fools.ua ©   (2005-08-08 08:56) [8]

Для Windows линейки NT:
CreateFile() + DeviceIOControl()
должны помочь.


 
Andr-04   (2005-08-08 09:36) [9]

Возможно, но я знаю только как при помощи этих функций получить информацию о винчестерах (их имена, сер. номера и т.д.). А о буквах в системе, назначенных разделам каждого винчестера, при помощи этого как узнать я не знаю (возможно, это и невозможно - нужны ещё некоторые другие). Если же я не прав, и это узнать при помощи данных функций можно - напишите как.



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

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
14-1126347466
OSokin
2005-09-10 14:17
2005.10.02
Всех с наступающим праздником - днем программиста!


1-1126243376
Stepan
2005-09-09 09:22
2005.10.02
Отладка в Delphi


3-1124250889
rentgen
2005-08-17 07:54
2005.10.02
Как построить правильно запрос SELECT+OR+AND


14-1126590459
КаПиБаРа
2005-09-13 09:47
2005.10.02
Самая интересная тема


1-1126162964
Zloj
2005-09-08 11:02
2005.10.02
Как получить значение возвроўаемое софтом?