0 / 0 / 0
Регистрация: 31.10.2012
Сообщений: 9
|
|
1 | |
собрать программу по статье28.11.2012, 10:16. Показов 1719. Ответов 2
Метки нет (Все метки)
Построим данную статью следующим образом:
1. Узнаем имя пользователя и компьютера 2. Информация о BIOS 3. Информация о центральном процессоре 4. Тип ПК 5. Получаем системные директории 6. Информация об ОС 7. Собираем инфу о принтерах 8. Информация о видеосистеме 9. Разбираемся с памятью 10. Мучаем сеть 11. Исследуем диски 12. Заключение 1. Узнаем имя пользователя и компьютера Итак, первое, с чем мы разберемся, - это получение имени компьютера и имени пользователя. Всем известно, что к цели можно идти разными путями как, например, при решении различных задач в математике, доказательстве теорем и тому подобное. Но у нас программирование, а не геометрия и уж тем более не продажа итальянской мебели, поэтому будем рассматривать все здесь, в этой сфере (по возможности будем рассматривать различные способы решения задач). Мне известны 3-и способа узнать имя пользователя и ПК: Использование системного реестра Windows Необходимую информацию можно посмотреть в следующих ключах: HKEY_CURRENT_USER/Volatile Environment ключи USERNAME – имя пользователя и USERDOMAIN – имя ПК. Однако в зависимости от системы (WinXP, 2000, Vista и др.) эти ключи могут отсутствовать. Выше приведенные ключи относятся к Vist'e. Для WinXP можно использовать следующие: для имени ПК – LOGONSERVER, а для имени пользователя HOMEPATH или USERPROFILE, но тут тебе придется вычислять имя пользователя (вытаскивать его из строки). Небольшой пример можно посмотреть в листинге номер 1. Листинг 1. Получаем имя пользователя и компьютера из реестра Procedure GetNamesInfo; var MyReg: TRegistry; RegPath: string; begin MyReg:=TRegistry.Create; MyReg.Rootkey:=HKEY_CURRENT_USER; RegPath:='\Volatile Environment'; MyReg.Openkey(RegPath, false); ShowMessage(‘Имя пользователя: ’+MyReg.ReadString(‘USERNAME’)); ShowMessage(‘Имя ПК: ’+MyReg.ReadString(‘USERDOMAIN’)); end; Возможно, есть и другие ключи в реестре, через которые можно узнать необходимую нам информацию. Можешь сам посмотреть, открыв реестр, а мы переходим к следующему способу. Использование сетевых функций Если ты когда–нибудь занимался программированием сокетов, то наверняка встречал такие функции как GetHostName и GetHostByAddr (кстати, данная функция присутствует также в PHP при программировании сокетов или, как говорят, сетевом программировании). Функция GetHostName в качестве параметров принимает имя буфера, в который будет записано имя ПК и размер буфера. Функцию GetHostByAddr пока оставим в покое (если кому интересно, можете почитать мануалы по программированию сокетов). Так, это были функции позволяющие узнать имя ПК. А как же имя пользователя? Если честно, то "прямых" функций, позволяющих узнать имя пользователя, я не встречал. Конечно, это не означает, что нет никакого способа узнать это, просто надо немного повозиться и сляпать свой алгоритм. Примеров приводить не будем, так как простой код будет мало понятен (пришлось бы отойти в сторону и рассказать немного о программировании сокетов, может в другой раз). Вместо этого переходим к заключительному способу. Использование WinAPI функций GetComputerName и GetUserName Данные функции предназначены для получения имени компьютера и имени пользователя соответственно. Они принимают по 2-а параметра: буфер и размер буфера. В результате в буфере мы получаем имя компьютера или пользователя (в зависимости от использованной функции). Пример использования функций приведен в листинге 2. Листинг 2. Получаем имя пользователя и компьютера с помощью WinAPI function UserName: string; //получаем имя пользователя var buf: array[0..MAX_COMPUTERNAME_LENGTH] of char; sizebuf: dword; begin GetUserName(buf,sizebuf); Result:=StrPas(buf); end; function CompName: string; //получаем имя компьютера var buf: array[0..MAX_COMPUTERNAME_LENGTH] of char; sizebuf: dword; begin GetComputerName(buf,sizebuf); Result:=StrPas(buf); end; В примерах мы объявили переменную buf как массив символов длинной от 0 до MAX_COMPUTERNAME_LENGTH (константа равная 15, объявлена в модуле Windows), т.е. размером в 16 символов и размер буфера sizebuf типа dword (тоже 16). В качестве дополнения упомяну функцию SetComputerName, которая служит для установки имени компьютера. В качестве параметра принимает новое имя компьютера. 2. Информация о BIOS После того как мы узнали какими способами можно получить имя компьютера и имя пользователя, приступим к следующей части нашей поисковой работы, а именно к BIOS. Узнать информацию о BIOS можно 2-мя способами (не забывайте, я говорю о тех способах, которые сам знаю) 1. Использовать Assembler (этот способ сразу отпадает, мы пишем статью о Delphi, может в другой раз) 2. Второй способ распадается на 2-ва, это связано с ОС. Итак, в Win 9x необходимую информацию можно узнать по фиксированному адресу в памяти $FFFF5. Например: infoBIOS: array[0..7] of char absolute $FFFF5; Хочу заметить, что по фиксированным адресам можно узнать не только информацию о BIOS’e, но и о типе ПК, видео адаптере и другой аппаратуре). В WinXP, 2000, Vista информацию о BIOS’e можно узнать в реестре (жаль, но в NT системах мы не сможем получить прямой доступ к адресам, которые нам необходимы). Итак данные берем здесь: HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System (в Vista есть еще ветка BIOS, там вся необходимая информация). Ключи VideoBiosDate – дата видео БИОС, SystemBiosDate – системная дата БИОС, SystemBiosVersion – версия БИОС. Небольшой пример приведен в листинге номер 3. Листинг 3. Получаем информацию о BIOS procedure GetBIOSInfo; var RegPath: string; MyReg: TRegistry; MyList: TStrings; SysDateBios: string; VersionBios: string; VideoBios: string; begin MyReg:=TRegistry.Create; MyReg.Rootkey:=HKEY_LOCAL_MACHINE; RegPath:='\HARDWARE\DESCRIPTION\System'; MyList:=nil; try MyReg.Openkey(RegPath, false); SysDateBios:='Системная дата BIOS: '+MyReg.ReadString('SystemBiosDate'); MyList:=ReadMultirowKey(MyReg,'SystemBiosVersion'); VersionBios:='Версия BIOS: '+MyList.Text; VideoBios:='Видео BIOS дата: '+MyReg.ReadString('VideoBiosDate'); except ShowMessage('Ошибка доступа к системному реестру! Не могу прочитать данные'); end; MyReg.Free; if Assigned(MyList) then MyList.Free; end; Еще одна функция для считывания мультистрок из реестра (она не моя, я использовал уже готовый прототип) приведена в листинге 4. Листинг 4. Ещё один способ получить информацию о BIOS function ReadMultirowKey(reg: TRegistry; Key: string): TStrings; const bufsize = 100; var i: integer; s1: string; sl: TStringList; bin: array[1..bufsize] of char; begin try result := nil; sl := nil; sl := TStringList.Create; if not Assigned(reg) then raise Exception.Create('TRegistry object not assigned.'); FillChar(bin, bufsize, #0); reg.ReadBinaryData(Key, bin, bufsize); i := 1; s1 := ''; while i < bufsize do begin if ord(bin) >= 32 then s1 := s1 + bin[i] else begin if Length(s1) > 0 then begin sl.Add(s1); s1 := ''; end; end; inc(i); end; result := sl; except sl.Free; raise; end; end; 3. Информация о центральном процессоре Далее будем пытать процессор. Посмотрим, что он нам скажет. Первый способ определения информации о процессоре (количество процессоров, сопроцессор, SSE, MMX, тип процессора и тд.) - это использование ассемблера, но нам он, как мы уже говорили, не подходит (не в этой статье). Второй способ - использование системного реестра Windows. Вот ветка: HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor (дальнейшие разделы – ветки зависят от количества установленных процессоров: 0 - это 1-ый процессор, 1 - это 2-ой процессор и тд.), (да, немного муторно проверять так количество процессоров и информацию по ним). Вот некоторые ключи, из которых можно почерпнуть необходимую нам информацию: ~MHz – частота процессора, Identifier – семейство, ProcessorNameString – имя процессора, тип, VendorIdentifier – производитель. Небольшой пример приведён в листинге 5. [i]Листинг 5. Получаем информацию о центральном процессоре Procedure GetProcessorInfo; var MyReg: TRegistry; RegPath: string; begin MyReg:=TRegistry.Create; MyReg.Rootkey:=HKEY_LOCAL_MACHINE; RegPath:='\HARDWARE\DESCRIPTION\System\CentralProcessor'; MyReg.Openkey(RegPath, false); ShowMessage(‘Производитель: ’+MyReg.ReadString(‘VendorIdentifier’)); ShowMessage(‘Семейство: ’+MyReg.ReadString(‘Identifier’)); ................................................ end; Третий способ – это использование Win API функции GetSystemInfo. Эта функция имеет один параметр, переменную типа TSystemInfo (это - структура (запись, говоря на языке Паскаль), производная от _SYSTEM_INFO, описание этой структуры я не буду приводить, если интересно, можешь посмотреть сам (нажми Ctrl и подведи курсор к TSystemInfo, кликни (дальше то же самое с _SYSTEM_INFO))). Итак, функция GetSystemInfo заполняет эту структуру и мы обращаясь затем к ней (структуре) получаем необходимые данные. Пример использования смотри в листинге 6. Листинг 6. Получаем информацию о центральном процессоре (WinAPI) procedure GetProcessorInfo; var ProcessInfo: TSystemInfo; ProcCount: string; ArchProc: string; TypeProc: string; begin GetSystemInfo(ProcessInfo); ProcCount:='Количество процессоров: '+IntToStr(ProcessInfo.dwNumberOfProcessors); ArchProc:='Архитектура процессора: '+IntToStr(ProcessInfo.wProcessorArchitecture); TypeProc:='Тип процессора'+IntToStr(ProcessInfo.dwProcessorType); end; 4. Тип ПК Давай теперь попробуем узнать тип ПК. Каким образом мы это можем осуществить? Если у тебя Win 9х (не NT), то узнать необходимые данные не трудно, достаточно обратиться по адресу $FFFFE (если ты знаешь ассемблер, можете использовать его для определения типа ПК). Пример смотри в листинге 7. Листинг 7. Получаем информацию о типе ПК в Win 9х. var typepc: byte absolute $FFFFE; pc: string; begin case typepc of $FC: pc:=’AT’; $FD: pc:=’PCjr’; $FE: pc:=’XT80’; $FF: pc:=’PC’; end; pc:=’Немогу определить тип ПК’; end; В случае WinXP, 2000, Vista нужно использовать реестр, вот ветка: HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/SYSTEM, ключ Identifier. Смотри листинг 8. Листинг 8. Получаем информацию о типе ПК в WinXP, 2000, Vista. function CompIdent: string; var MyReg: TRegistry; RegPath: string; begin MyReg:=TRegistry.Create; MyReg.Rootkey:=HKEY_LOCAL_MACHINE; RegPath:='\HARDWARE\DESCRIPTION\System'; MyReg.Openkey(RegPath, false); Result:='Тип компьютера: '+MyReg.ReadString('Identifier'); end; 5. Получаем системные директории Теперь попробуем найти директорию Windows и системную директорию. Не будем мудрить и рассказывать какие-то лишние и неуместные приемы реализации задуманного. Скажем просто, существует один очень простой и незамысловатый метод – это использование Win API функций. Итак, GetWindowsDirectory возвращает каталог Windows, GetSystemDirectory возвращает системный каталог. Эти 2-е функции принимают 2-а параметра: буфер (в нем и будет находиться необходимая нам информация после выполнения функции) и размер буфера. Пример использования функций находится в листинге 9. Листинг 9. Получаем информацию о системных директориях. //получаем системную директорию function GetSysDirectory: string; var buf: array [0..255] of char; bufsize: dword; begin GetSystemDirectory(buf,bufsize); Result:=StrPas(buf) end; //получаем директорию Windows function GetWinDirectory: string; var buf: array [0..255] of char; bufsize: dword; begin GetWindowsDirectory(buf,bufsize); Result:=StrPas(buf) end; 6. Информация об ОС От директорий к самой ОС. Попробуем узнать тип и версию Windows, для этого воспользуемся API функцией GetVersionEx (есть еще один способ - использование асма ), это - расширенная функция, позволяющая узнать более подробную информацию об ОС. Есть еще одна функция GetVersion, она позволяет узнать версию Windows и DOS. В старшем слове возвращает версию DOS’a, в младшем слове версию Windows). Пример в листинге 10. Листинг 10. Получаем информацию об ОС var win, dos: word; begin win:=GetVersion and $0000FFFF; dos:=GetVersion shr 16; end; Вернемся к функции GetVersionEx, она принимает один параметр – структуру TOSVersionInfo (для этой статьи правильно будет "запись", а не структура, но, в принципе, это - ведь одно и тоже, просто на Паскале принято такие вещи величать записью, а на Си структурами). Опишем эту структуру (запись): DwVersionInfoSize: dword – заполняется перед вызовом функции (размер нашей структуры) DwMajorVersion: dword – старшая цифра версии Windows (3 это WinNT 3.51, 4 это Win98, 95, Me, NT4.0 и 5 это WinXP, 2000, да 6-ка это Vista) DwMinorVersion: dword – младшая цифра версии Windows (0 это Win95, 10 это Win98, 90 это Win Me, 51 WinNT 3.51, 0 это WinNT 4.0, 0 это Win 2000, 1 это WinXP) DwBuildNumber: dword – номер билда DwPlatformId: dword – платформа (VER_PLATFORM_WIN32s – Win3.1, VER_PLATFORM_WIN32 – Win9x, VER_PLATFORM_WIN32_NT – WinNT, 2000) SzCSDVersion:dword – информация о сервис паке. Пример использования функции смотри в листинге 11. Листинг 11. Получаем информацию об ОС. procedure GetOSInfo; var MyOS: TOSVersionInfo; majorVer, minorVer: Integer; begin MyOS.dwOSVersionInfoSize:=sizeof(MyOS); VersionOS:='Неизвестная ОС'; if GetVersionEx(MyOS) then begin majorVer := MyOS.dwMajorVersion; minorVer := MyOS.dwMinorVersion; case MyOS.dwPlatformId of VER_PLATFORM_WIN32_NT : begin if majorVer <= 4 then VersionOS:='ОС Windows NT' else if (majorVer = 5) and (minorVer= 0) then VersionOS:='OC Windows 2000' else if (majorVer = 5) and (minorVer = 1) then VersionOS:= 'OC Windows XP' else VersionOS:='Неизвестная ОС'; end; VER_PLATFORM_WIN32_WINDOWS : begin if (majorVer = 4) and (minorVer = 0) then VersionOS:='OC Windows 95' else if (majorVer = 4) and (minorVer = 10) then begin if MyOS.szCSDVersion[1] = 'A' then VersionOS:='OC Windows 98 SE' else VersionOS:='OC Windows 98'; end else if (majorVer = 4) and (minorVer = 90) then VersionOS:='OC Windows Me' else VersionOS:='Неизвестная ОС'; end; else VersionOS:='Неизвестная ОС'; end; end else VersionOS:='Неизвестная ОС'; В качестве дополнения к этому пункту можно добавить информацию следующего плана: узнать откуда была установлена Windows – ветка в реестре HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/Setup ключ SourcePath и ключ BootDir – загрузочный диск (т.е. диск с которого грузится винда, по умолчанию C:\), а также узнать установлен ли NetFrameWork, и какова его версия можно узнать из реестра по адресу HKEY_LOCAL_MACHINE/Software/Microsoft/.NETFrameWork/Policy. 7. Собираем инфу о принтерах Всю необходимую информацию можно узнать из реестра: HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Print/Printers ключ DefaultSpoolDirectory – текущая директория спулера. Дальнейшие подветки будут являться "установленными принтерами". Ключи Name – имя принтера, Port – порт принтера, PrinterDriver – драйвер принтера. Второй способ - использование глобального объекта Printer. Пример можно глянуть в листинге 12. Листинг 12. Получаем информацию о принтерах procedure GetPrinterInfo; var MyReg: TRegistry; RegPath: string; List: TStringList; i: integer; printinfo: TStringList; begin MyReg:=TRegistry.Create; //List:=nil; List:=TStringList.Create; printinfo:=nil; printinfo:=TStringList.Create; MyReg.Rootkey:=HKEY_LOCAL_MACHINE; RegPath:='\System\CurrentControlSet\Control\Print\Printers'; MyReg.Openkey(RegPath, false); MyReg.GetKeyNames(List); MyReg.CloseKey; for i:=0 to List.Count-1 do begin MyReg.OpenKey(RegPath+'\'+List.Strings,false); printinfo.Add(MyReg.ReadString('Name')); printinfo.Add(MyReg.ReadString('Port')); printinfo.Add(MyReg.ReadString('Printer Driver')); end; List.Free; printinfo.Free; end; 8. Информация о видеосистеме Посмотрим информацию о видео системе. Некоторые данные, а именно разрешение экрана можно узнать при помощи глобального объекта Screen. Пример в листинге 13. [i]Листинг 13. Получаем информацию о разрешении экрана. var x: string; begin X:=’Разрешение =’+IntToStr(Screen.Width)+’x’+ IntToStr(Screen.Height); end; Остальные данные получим через Win API функцию GetDeviceCaps и контекст драйвера HDC. Давайте рассмотрим все подробнее на примере в листинге 14. Листинг 14. Получаем информацию о видеосистеме. procedure GetVideoInfo; var DC: hdc; mycolor: string; col: string; bitonpixel: string; planesinfo: string; ext: string; begin DC :=CreateDC('DISPLAY',nil,nil,nil); ext:='Разрешение: '+IntToStr(Screen.Width)+'x'+IntToStr(Screen.Height); bitonpixel:='Бит на Пиксел: '+IntToStr(GetDeviceCaps(DC,BITSPIXEL)); planesinfo:='Planes: '+IntToStr(GetDeviceCaps(DC,PLANES)); case GetDeviceCaps(DC,BITSPIXEL) of 8 : mycolor := '256 цветов'; 15 : mycolor := 'Hi-Color / 32768 цветов'; 16 : mycolor := 'Hi-Color / 65536 цветов'; 24 : mycolor := 'True-Color / 16 млн цветов'; 32 : mycolor := 'True-Color / 32 бит'; end; col:='Цвета: '+mycolor; DeleteDC(DC); end; В данном примере я упомянул и разрешение экрана, но это не важно, для нас важно другое - разобраться с GetDeviceCaps. Итак, в разделе переменных мы объявили DC (в нем будет указатель на полученное устройство) типа hDC. Далее при помощи функции CreateDC мы создаем "устройство" (или лучше сказать получаем контекст драйвера устройства), передав в качестве первого параметра DISPLAY (первый параметр - это указатель на драйвер), остальные три параметра мы опускаем, так как они для нас не нужны, заполняем nil’ами. Все, устройство получили, можно с ним работать. Здесь нам поможет как раз функция GetDeviceCaps, в качестве параметров он принимает указатель на устройство (в данном примере DC), и второй параметр - это число (так скажем, обозначающее те данные, которые мы хотим получить от этого устройства). Вместо чисел удобнее использовать символьные константы из модуля Windows, сам можешь посмотреть. Ну вот, в принципе, и все, из примера видно как использовать функцию. И да, по завершению работы удаляйте DC при помощи DeleteDC (см. пример). 9. Разбираемся с памятью Вот мы и добрались до памяти. В этом пункте посмотрим информацию о физической и виртуальной памяти при помощи Win API функции GlobalMemoryStatus. Функция принимает один параметр – это структура TMemoryStatus. Сейчас давайте рассмотрим пример, а потом все разберем. Смотри листинг 15. Листинг 15. Получаем информацию о виртуальной памяти. procedure GetMemoryInfo; var MyMem: TMemoryStatus; LoadMem: string; AllMem: string; FreeMem: string; VirtMem: string; FreeVirtMem: string; begin MyMem.dwLength:=SizeOf(MyMem); GlobalMemoryStatus(MyMem); with MyMem do begin LoadMem:='Загружено памяти: '+IntToStr(dwMemoryLoad) + '%'; AllMem:='Всего памяти: '+Format('%0.0f Мбайт',[dwTotalPhys div 1024 / 1024]); FreeMem:='Осталось памяти: '+Format('%0.3f Мбайт',[dwAvailPhys div 1024 / 1024]); VirtMem:='Виртуальная память: '+Format('%0.0f Мбайт',[dwTotalPageFile div 1024 / 1024]); FreeVirtMem:='Осталось виртуальной памяти: '+Format('%0.0f Мбайт',[dwAvailPageFile div 1024 / 1024]); end; end; Давай разбираться. В разделе переменных мы объявили нашу структуру (MyMem) и другие вспомогательные переменные, в которые запишем необходимую информацию (количество памяти, свободно, загружено и др.). Далее перед вызовом GlobalMemoryStatus нам необходимо указать размер нашей структуры - dwLength и можно вызывать функцию. Все вызвали, в MyMem все данные которые нам нужны: (описание структуры) DwMemoryLoad – загружено памяти (в процентах) DwTotalPhys – всего оперативной памяти (в байтах) DwAvailPhys – осталось оперативной памяти (в байтах) DwTotalPageFile – всего виртуальной (файл подкачки) памяти (в байтах) DwAvailPageFile – осталось виртуальной памяти (в байтах) Ну, вот в принципе и все. Структуру я описал, остальное из примера видно, что и как. Для редактирования полученных данных использовалась функция Format (так как память то в байтах и ты получишь длинную цепочку циферек (ну в прочем какова оператива, такова и длина этой цепочки ). 10. Мучаем сеть В этом пункте рассмотрим подключение к интернету и локальной сети. Каким образом можно определить подключение к сетям (локальным и глобальным)? Ну, тут способов много (естественно все их мы не рассмотрим, только основные). Итак, по порядку. Подключение к интернету: Первый способ – это использование Indy компонента IdIPWatch c вкладки IndyMisc. Узнать подключен ли компьютер к интернету можно через свойство IsOnline (этого компонента), оно возвращает true если подключен и false в противном случае. А также узнать IP можно через свойство CurrentIP. P.S. Не забудьте установить свойство Active в true. Второй способ – использование функции InetIsOffline из библиотеки URL.dll. Третий способ – использование функции InternetGetConnectedState. Пример в листинге 16. Листинг 16. Проверяем подключение к Интернету const MODEM=1; LAN=2; PROXY=3; var Con: dword; begin Con:=MODEM+LAN+PROXY; If InternetGetConnectedState(@Con,0) then ShowMessage(‘Подключены’) else ShowMessage(‘Не подключены’); end; При проверке подключения к локальной сети используем Win API функцию GetSystemMetrics. Пример в листинге 17. Листинг 17. Проверяем подключение к локальной сети. begin if GetSystemMetrics(SM_NETWORK) and $01=$01 then ShowMessage(‘Обнаружено’) else ShowMessage(‘Не обнаружено’); end; Все это будет работать (т.е. возвращать true) если установлена сетевая карта и она активна. Еще можно узнать информацию о сетевых картах, для этого надо заглянуть в реестр по адресу: HKEY_LOCAL_MACHINE/Software/Microsoft/WindowsNT/CurrentVersion/NetworkCards. Так же можно придумать массу своих методов для обнаружения подключений к сети. 11. Исследуем диски И последнее, что мы рассмотрим в этой статье, – это диски (CD, Hard). Практически всю необходимую информацию можно узнать из Win API функции GetVolumeInformation. Функция принимает много параметров, поэтому рассмотрим все на примере (листинг 18). Листинг 18. Исследуем диски. procedure GetDiskInfo; var VolumeName, FileSystemName: array [0..MAX_PATH-1] of Char; VolumeSerialNo: DWord; MaxComponentLength,FileSystemFlags: Cardinal; DiskInfo: TStrings; begin GetVolumeInformation('D:\',VolumeName,MAX_PATH,@VolumeSerialNo, MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH); DiskInfo.Add('Метка тома: '+VolumeName); DiskInfo.Add('Серийный номер: $'+IntToHex(VolumeSerialNo,8)); DiskInfo.Add('CompLen: '+IntToStr(MaxComponentLength)); DiskInfo.Add('Флаги файловой системы: $'+IntToHex(FileSystemFlags,4)); DiskInfo.Add('Файловая система: '+FileSystemName); end; DiskInfo.Free; end; Итак, функция принимает первым параметром имя диска (не забудь двоеточие и слеш), вторым параметром – буфер под метку тома, третий параметр – размер этого буфера (буфера метки тома, мы указали MAX_PATH (глобальную константу = не помню, по-моему 260)), четвертый параметр – это серийный номер (указываем соот. переменную), пятый параметр – это максимальная длина имени файла (если не ошибаюсь), шестой параметр – это флаги файловой системы, седьмой параметр – это буфер под имя файловой системы, и последний размер этого буфера. Фуф все. Думаю, из примера вам будет все ясно. Также есть еще функция для определения типа диска GetDriveType, которая принимает в качестве параметра имя диска (например, C:\) и возвращает: 0: если неизвестный диск 1: неверное имя диска DRIVE_REMOVABLE: дискета DRIVE_FIXED: FIXED DRIVE_REMOTE: удаленный диск (сетевой) DRIVE_CDROM: CD ROM DRIVE_RAMDISK: RAM диск 12. Заключение В завершении, наверное, стоит сказать, что это, конечно же, - не все данные (относительно нашего компьютера), которые мы можем получить. Можно еще расширять и раздувать статью по этому поводу вширь и поперек. Поэтому она остается не завершенной. Если ты увидел опечатки, ошибки, неточности или у тебя есть дополнения, пиши мне на почту, все учту. Добавлено через 1 минуту http://fisdel.ru/paskal--delfi... ju-o-kompe
0
|
28.11.2012, 10:16 | |
Ответы с готовыми решениями:
2
Собрать программу Нужно собрать программу Не могу собрать программу Не получается собрать программу |
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
28.11.2012, 11:18 | 2 |
2
|
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
|
|
28.11.2012, 12:36 | 3 |
Добавлено через 56 секунд пишите все эти процедуры в разделе реализации, а потом повесте на кнопку их вызов
0
|
28.11.2012, 12:36 | |
28.11.2012, 12:36 | |
Помогаю со студенческими работами здесь
3
Как собрать программу? Собрать программу по коду собрать из файлов программу Собрать и откомпилировать программу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества
Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
|
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов.
. . .
|
С чего начать программировать микроконтроллеры
raxper 06.01.2025
Введение в мир микроконтроллеров
Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
|
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
|
Обновление сайта www.historian.by
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
|
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
|
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list):
s=^y]
p=x and y
for i in range(1,len(x)):
s. append((x^y)^p)
p=(x and y)or(p and (x or y))
return s
x=list()
y=list()
|