::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-06 21:00:18, Hit : 7533, Vote : 1306
 시스템의 각종 정보

// 작성자: 차정훈 (whiteowl@hanmail.net)

unit GetInfo;

interface

uses
Windows, Messages, SysUtils, Classes, Registry;

type
SystemInfoRecord = record
   VolumeName,                     // 디스크 볼륨명
   VolumeSerial,                   // 디스크 시리얼번호
   FileSystemName,                 // 파일구조
   Drives            : shortstring;// 디스크명들
   ProcessorType     : shortstring;// CPU 타입(MMX나 P-II는 안됨)
   Version,                        // 윈도우 버전
   Plattform         : shortstring;// 윈도우 종류
   PlattId           : DWORD;      // 현 플랫폼 ID
   ComputerName,                   // 컴퓨터 이름
   FPU,                            // FPU 유무
   UserName,                       // 사용자 이름
   CompanyName,                    // 회사이름
   CDSerial          : shortstring;// 윈도우 시디 시리얼번호
   TotalPhys,                      // 총 메모리
   AvailPhys,                      // 이용할 수 있는 메모리
   TotalVirtual,                   // 총 가상메모리
   AvailVirtual,                   // 이용할 수 있는 가상메모리
   MemoryLoad        : DWORD;      // 메모리 적재율
   BiosDate,                       // 마더보더의 바이오스 날짜
   BiosName,                       // 마더보더의 바이오스 이름
   BiosVer,                        // 마더보더의 바이오스 버전
   BusType,                        // 버스타입
   CPU,                            // 바이오스에 나타난 CPU종류
   MachineType       : shortstring;// 바이오스에 나타난 컴종류
end;

var
SysInfoRec: SystemInfoRecord;

function  GetAllSystemInfo: SystemInfoRecord; stdcall;

implementation

var
OSVerInfo: TOSVersionInfo;

function GetRegStr(Key, St: string): string;
begin
   with TRegistry.Create do
   try
     RootKey := HKEY_LOCAL_MACHINE;
     if OpenKey(Key, False) then result := ReadString(St);
   finally
     Free;
   end;
end;

procedure GetComputerName;
var
  Computer : PChar;
  CSize    : DWORD;
begin
  CSize := MAX_COMPUTERNAME_LENGTH + 1;
  try
     GetMem( Computer, CSize );
     if Windows.GetComputerName( Computer, CSize ) then
        SysInfoRec.ComputerName := Computer;
  finally
     FreeMem( Computer );
  end;
end;

procedure GetVolumeInfo;
var
  lpRootPathName           : PChar;
  lpVolumeNameBuffer       : PChar;
  nVolumeNameSize          : DWORD;
  lpVolumeSerialNumber     : DWORD;
  lpMaximumComponentLength : DWORD;
  lpFileSystemFlags        : DWORD;
  lpFileSystemNameBuffer   : PChar;
  nFileSystemNameSize      : DWORD;
begin
  try
     GetMem( lpVolumeNameBuffer, MAX_PATH + 1 );
     GetMem( lpFileSystemNameBuffer, MAX_PATH + 1 );

     nVolumeNameSize := MAX_PATH + 1;
     nFileSystemNameSize := MAX_PATH + 1;

     lpRootPathName := PChar( 'C:' );
     if Windows.GetVolumeInformation( lpRootPathName,
                                      lpVolumeNameBuffer,
                                      nVolumeNameSize,
                                      @lpVolumeSerialNumber,
                                      lpMaximumComponentLength,
                                      lpFileSystemFlags,
                                      lpFileSystemNameBuffer,
                                      nFileSystemNameSize ) then
     begin
       with SysInfoRec do begin
         VolumeName         := lpVolumeNameBuffer;
         VolumeSerial       := IntToHex(HiWord(lpVolumeSerialNumber), 4) + '-' +
                 IntToHex(LoWord(lpVolumeSerialNumber), 4);
         FileSystemName     := lpFileSystemNameBuffer;
       end;
     end;
  finally
     FreeMem( lpVolumeNameBuffer );
     FreeMem( lpFileSystemNameBuffer );
  end;
end;

procedure GetOSVersionInfo;

function Plat(Pl: DWORD): string;
begin
   case Pl of
     VER_PLATFORM_WIN32s:        result := 'Windows 3.1';
     VER_PLATFORM_WIN32_WINDOWS: result := 'Windows 95';
     VER_PLATFORM_WIN32_NT:      result := 'Windows NT';
     else                        result := '???';
   end;
end;

begin

with OSVerInfo, SysInfoRec do begin
   dwOSVersionInfoSize := SizeOf(OSVerInfo);
   if GetVersionEx(OSVerInfo) then;
   Version := Format('%d.%d (%d.%s)',[dwMajorVersion, dwMinorVersion,
                                     (dwBuildNumber and $FFFF), szCSDVersion]);
   Plattform := Plat(dwPlatformId);
   PlattID   := dwPlatformId;
end;
end;

procedure GetDriveNames;
var
  D1   : set of 0..25;
  D2   : integer;
begin
  DWORD( D1 ) := Windows.GetLogicalDrives;
  with SysInfoRec do begin
    Drives := '';
    for D2 := 0 to 25 do
       if D2 in D1 then
          Drives := Drives + Chr( D2 + Ord( 'A' )) + ': ';
  end;
end;

procedure GetSystemInfo;
var TmpStr: string;
   MProc: string;
   LocalSI: TSystemInfo;
const
  PROCESSOR_INTEL_386     = 386;
  PROCESSOR_INTEL_486     = 486;
  PROCESSOR_INTEL_PENTIUM = 586;
  PROCESSOR_MIPS_R4000    = 4000;
  PROCESSOR_ALPHA_21064   = 21064;
begin
Windows.GetSystemInfo(LocalSI);

with LocalSI, SysInfoRec do begin
   case dwProcessorType of
      PROCESSOR_INTEL_386      : ProcessorType := ' 386';
      PROCESSOR_INTEL_486      : ProcessorType := ' 486';
      PROCESSOR_INTEL_PENTIUM  : ProcessorType := ' Pentium';
      PROCESSOR_MIPS_R4000     : ProcessorType := ' MIPS';
      PROCESSOR_ALPHA_21064    : ProcessorType := ' ALPHA';
   end;
end;
end;

procedure MemoryInfo;
var
  MemStatus: TMemoryStatus;
begin
MemStatus.dwLength := SizeOf(MemStatus);
GlobalMemoryStatus(MemStatus);
with SysInfoRec do begin
   TotalPhys    := MemStatus.dwTotalPhys DIV 1024;
   AvailPhys    := MemStatus.dwAvailPhys DIV 1024;
   TotalVirtual := MemStatus.dwTotalVirtual DIV 1024;
   AvailVirtual := MemStatus.dwAvailVirtual DIV 1024;
   MemoryLoad   := MemStatus.dwMemoryLoad;
end;
end;

procedure GetRegisterInfo;
const
FPPKey = 'hardwareDESCRIPTIONSystemFloatingPointProcessor';
var
CurVerKey : PChar;
begin
with SysInfoRec do begin
   case PlattID of
     VER_PLATFORM_WIN32_WINDOWS :
           CurVerKey := 'SOFTWAREMicrosoftWindowsCurrentVersion';
     VER_PLATFORM_WIN32_NT      :
           CurVerKey := 'SOFTWAREMicrosoftWindows NTCurrentVersion';
     else  CurVerKey := nil;
   end;

   with TRegistry.Create do
   try
       RootKey := HKEY_LOCAL_MACHINE;
       if OpenKey(FPPKey, False) then
          FPU :=  'Yes'
       else FPU :=  'No';
   finally
     Free;
   end;

   UserName := GetRegStr(CurVerKey,'RegisteredOwner');
   CompanyName := GetRegStr(CurVerKey,'RegisteredOrganization');
   if PlattID = VER_PLATFORM_WIN32_WINDOWS then
      CDSerial :=  GetRegStr(CurVerKey,'ProductID');

end;
end;

procedure GetBiosInfo;
begin
with SysInfoRec do begin
   BiosDate    := GetRegStr('EnumRoot*PNP0C01000','BIOSDate');
   BiosName    := GetRegStr('EnumRoot*PNP0C01000','BIOSName');
   BiosVer     := GetRegStr('EnumRoot*PNP0C01000','BIOSVersion');
   BusType     := GetRegStr('EnumRoot*PNP0C01000','BusType');
   CPU         := GetRegStr('EnumRoot*PNP0C01000','CPU');
   MachineType := GetRegStr('EnumRoot*PNP0C01000','MachineType');
end;
end;

function GetAllSystemInfo: SystemInfoRecord; stdcall;
begin
GetOSVersionInfo;
GetOSVersionInfo;
GetDriveNames;
GetSystemInfo;
GetVolumeInfo;
GetComputerName;
MemoryInfo;
GetRegisterInfo;
GetBiosInfo;
result := SysInfoRec;
end;

end.





691   [일반/컴포넌트] ListView 의 컬럼별로 Sort (내림차순 포함)  김영대 2003/03/05 5191 1101
690   [일반/컴포넌트] 명령행 인자 받아오기  김영대 2003/03/05 7208 1882
689   [네트웍/인터넷] List of raw FTP commands  김영대 2003/03/05 7229 1894
688   [네트웍/인터넷] RFC: Request for Comments  김영대 2003/03/05 7756 2039
687   [네트웍/인터넷] 윈도우즈 소켓의 에러번호에 대한 설명  김영대 2003/03/05 7812 2703
686   [일반/컴포넌트] 파일의 해부  김영대 2003/03/05 6351 1694
685   [일반/컴포넌트] ListBox의 스크롤바를 움직여보자  김영대 2003/03/05 4495 1098
684   [일반/컴포넌트] PopupMenu의 특정 MenuItem으로 이동하기  김영대 2003/03/05 2898 783
683   [일반/컴포넌트] 데스크탑의 아이콘을 몽땅 움직여보자!!  김영대 2003/03/05 6394 1897
682   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5813 1210
681   [일반/컴포넌트] 제어판의 applet 띄우기  김영대 2003/03/05 2844 765
680   [일반/컴포넌트] INI 파일이 저장을 안 해?  김영대 2003/03/05 4091 1086
679   [일반/컴포넌트] 마우스영역 제어하기  김영대 2003/03/05 3626 978
678   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 5255 1406
677   [일반/컴포넌트] Interesting Delphi Keystrokes !  김영대 2003/03/05 3601 1064
676   [일반/컴포넌트] Application 수준에서 한글/영문 제한두기  김영대 2003/03/05 5999 1855
675   [데이터베이스] dBASE Table File Extensions  김영대 2003/03/05 4594 1296
674   [데이터베이스] Paradox Table File Extensions  김영대 2003/03/05 3662 1033
673   [일반/컴포넌트] 파일의 속성(Attribute) 읽기 / 바꾸기  김영대 2003/03/05 4039 1049
672   [데이터베이스] DBGrid 에서 수직 Scroll Bar 감추기  김영대 2003/03/05 4636 1266
671   [윈도우즈 API] 인터넷 링크 만들기  김영대 2003/03/06 4557 1271
670   [네트웍/인터넷] 내 PC의 IP주소는 ?  김영대 2003/03/06 5285 1229
669   [일반/컴포넌트] 문자열의 암호화(Password 처리) & INI 파일  김영대 2003/03/06 6291 1497
668   [윈도우즈 API] 윈도우의 타이틀바를 없애보자!  김영대 2003/03/06 4448 1356
667   [윈도우즈 API] 클립보드의 내용을 TXT 파일에 담아보자!  김영대 2003/03/06 6329 1762
666   [시스템] 프로세서를 생성시켜보자!  김영대 2003/03/06 4559 1214
665   [일반/컴포넌트] 델파이의 Object Inspector 모방  김영대 2003/03/06 3598 829
  [시스템] 시스템의 각종 정보  김영대 2003/03/06 7533 1306
663   [데이터베이스] DBGrid 특정 Cell에 색상넣기  김영대 2003/03/06 7729 1585
662   [데이터베이스] DBGrid 의 특정필드만 Highlighting 시키기  김영대 2003/03/06 4663 1140
661   [COM/OLE] How to register an OCX  김영대 2003/03/06 5007 1171
660   [윈도우즈 API] "Windows 정보" About 화면 사용하기  김영대 2003/03/06 6441 1985
659   [일반/컴포넌트] 문자열에 한글이 있는지 검사  김영대 2003/03/06 3846 984
658   [일반/컴포넌트] TColor값을 16진수 문자열로 바꾸기  김영대 2003/03/06 6164 1775
657   [일반/컴포넌트] 화면변경시 콤포넌트 위치와 크기를 조정  김영대 2003/03/06 4633 1128
656   [시스템] 마우스 포인터 속도 구하기  김영대 2003/03/06 5479 1715
655   [시스템] 마우스 포인터 속도 바꾸기  김영대 2003/03/06 4968 1251
654   [시스템] 마우스 자취(trails)의 갯수 조정하기  김영대 2003/03/06 5836 1839
653   [시스템] 마우스 두 번 누르기 속도 조정하기  김영대 2003/03/06 5895 1827
652   [데이터베이스] 설치된 BDE Language Drivers 구하기  김영대 2003/03/06 3431 825

[1][2][3][4][5][6][7] 8 [9][10]..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero