Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение данных системы... [D7, XP]


Ultimate ©   (2008-02-26 14:45:00) 

Какой командой можно получить имя жесткого диска (К примеру чтоб у меня вывело ST3120026A)? Или имя компьютера (которое задается при установке ОС)? Также как сделать запись параметра в реестр и чтение этого же параметра с реестра позже?


Ultimate   (2008-02-27 19:44:00) [1]

Щас проблема с реестром. Записал ключ через
RegFile := TRegIniFile.Create(SubKey);
RegFile.WriteString(StrKey, 'Value', IntToStr(znach+555));


через редактор реестра вижу, что ключ на месте...
но когда прошу вывести значение ключа по команде
Edit2.Text:=RegFile.ReadString(StrKey, 'Value', '');
Ничего не выходит... Пишет про EAccesViolation и адреса всякие...Если вместо RegFile.ReadString(StrKey, 'Value', '')ввести строку, то всё нормально... Может что-то не так?


Ultimate   (2008-02-26 16:50:00) [2]

Как я понял собака зарыта в GetVolumeInformation(PChar Disk+':'),_VolumeName,MAX_PATH,@_VolumeSerialNo, _MaxComponentLength,_FileSystemFlags,_FileSystemName,MAX_PATH)
но в чем конкретно я непойму... как мне вынуть только серийный номер незнаю... :(


Ultimate   (2008-02-26 15:37:00) [3]

понял я куда это. но в нем ошибка...
в hddinfo.pas в части
begin
DriveArray:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
for I := 1 to 26 do  
  if GetDriveType(PChar(DriveArray[I]+':')) = TypeOfDisk then  
    Result := Result+DriveArray[I];

пишет что if GetDriveType(PChar(DriveArray[I]+':')) = TypeOfDisk theninvalid typecast что мона сделать?


Palladin   (2008-02-26 15:29:00) [4]

ответ так и напрашивается... :)


Ultimate   (2008-02-26 15:28:00) [5]


> http://home.earthlink.net/~akonshin/delphi_ru.htm- там
> есть как получить номер диска

я нашел IdeSN2 но он просит что-то установить в винду. в ридми так что-то написано. да и мне он вечно ошибки пишет. мол устройство не подключено. а разбирать этот скрипт нет времени.
нашел это:
Hddinfo.pas
-------------------
unit HDDInfo;

interface

Uses Windows;

Const {Константы для TypeOfDisk функции GetDisks}
DiskUnknown=0; {Неизвестные диски}  

DiskNone=1; {Отсутствующие диски}  

DiskFDD=DRIVE_REMOVABLE; {Съёмные диски, дискеты}  

DiskHDD=DRIVE_FIXED; {Не съёиные диски, жёсткие диски}  

DiskNet=DRIVE_REMOTE; {Сетевые диски}  

DiskCDROM=DRIVE_CDROM; {CD ROM}  

DiskRAM=DRIVE_RAMDISK; {Диски в ОЗУ}  

 

{Получить имена нужных дисков}
function GetDisks(TypeOfDisk : Word) : String;

{Функция получения информации о диске (HDD,FDD,CD) с буквой Disk}
{
Передаваемые значения:
Disk - Буква диска

Получаемые значения:
VolumeName - Метка/Имя тома
FileSystemName - Файловая система
VolumeSerialNo - Серийный номер диска (можно привязывать к диску программы)
MaxComponentLength - Максимальная длинна имени файла
FileSystemFlags - Флаги смотрите в справке Delphi по GetVolumeInformation

Функция возвращает true, если всё прошло успешно (диск нашёлся),
и false, если возникли проблемы, например диска нет в дисководе,
либо дисковода такого вообще нет
}
Function GetHDDInfo(Disk : Char;Var VolumeName, FileSystemName : String;
Var VolumeSerialNo, MaxComponentLength, FileSystemFlags:LongWord) : Boolean;

implementation

function GetDisks(TypeOfDisk : Word) : String;{Получить имена нужных дисков}
var  

  DriveArray : array[1..26] of Char;  

  I : integer;  

 
begin
DriveArray:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';  

for I := 1 to 26 do  

  if GetDriveType(PChar(DriveArray[I]+':')) = TypeOfDisk then  

    Result := Result+DriveArray[I];  

 
end;

Function GetHDDInfo(Disk : Char;Var VolumeName, FileSystemName : String;
 Var VolumeSerialNo, MaxComponentLength, FileSystemFlags:LongWord) : Boolean;
 Var
_VolumeName,_FileSystemName:array [0..MAX_PATH-1] of Char;  

_VolumeSerialNo,_MaxComponentLength,_FileSystemFlags:LongWord;  

 
Begin
if GetVolumeInformation(PChar(Disk+':'),_VolumeName,MAX_PATH,@_VolumeSerialNo,  

   _MaxComponentLength,_FileSystemFlags,_FileSystemName,MAX_PATH) then  

 
Begin  

 
VolumeName:=_VolumeName;  

VolumeSerialNo:=_VolumeSerialNo;  

MaxComponentLength:=_MaxComponentLength;  

FileSystemFlags:=_FileSystemFlags;  

FileSystemName:=_FileSystemName;  

Result:=True;  

 
End  

 
else  

  Result:=False;  

 
End;
end.

{-------}
Project.dpr
------------
program Project1;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 Unit1 in 'Unit1.pas',hddinfo;

var
 ss:tsearchrec;
 s,ff:string;
 i:integer;
begin
 { TODO -oUser -cConsole Main : Insert code here }
 writeln('vvedi imia fajla');
 readln(ff);
             {тут указать че сканить а че нет}
s:='';
S:=S+GetDisks(DiskHDD);
 S:=S+GetDisks(DiskCDROM);
 S:=S+GetDisks(DiskNet);
 S:=S+GetDisks(DiskRAM);

 for i:=1 to length(s) do
 begin
 scandir(s[i]+':',ff);
 end;
 readln;
//  write(ss.name);
end.

{-----}
Unit1.pas
----------

unit Unit1;

interface
uses sysutils,dialogs;
  Procedure ScanDir(Dir:string;filename:string);
implementation

Procedure ScanDir(Dir:string;filename:string);
var SearchRec:TSearchRec;
begin
if Dir<>'' then if Dir[length(Dir)]<>'' then Dir:=Dir+'';
if FindFirst(Dir+'*.*', faAnyFile, SearchRec)=0 then

repeat
if (SearchRec.name='.') or (SearchRec.name='..') then continue;
if (SearchRec.Attr and faDirectory)<>0 then
ScanDir(Dir+SearchRec.name,filename) //we found Directory: "Dir+SearchRec.name"
else
if filename = SearchRec.Name then write(Dir+SearchRec.name); //we found File: "Dir+SearchRec.name"
until FindNext(SearchRec)<>0;
FindClose(SearchRec);
end;
end.

{-----}

{-------}


но незнаю куда это воткнуть...


Thrasher   (2008-02-26 15:04:00) [6]


> Также как сделать запись параметра в реестр и чтение этого
> же параметра с реестра позже?

Tregistry никто не отменял.


> Какой командой можно получить имя жесткого диска (К примеру
> чтоб у меня вывело ST3120026A)?

http://home.earthlink.net/~akonshin/delphi_ru.htm- там есть как получить номер диска


Наверх

Титульная страница Поиск, карта сайта Написать письмо