[BlueLeaf1336]> PROBLEMS> winbeads>
history | TOP |
2005/01/26:作成
2005/01/27:更新
2005/02/19:更新
IEの適用済みの更新を取得する | TOP |
次はInternet Explorerの適用済みの更新です。参考になりそうなサイトを探します。...ありませんでした。仕方がないので、いつも使わせて戴いている Donut RAPT のバージョン情報で確認できる更新の内容をコピーして、レジストリエディタで検索すると、もろにそのままの「;SP1;Q330994;Q813489;Q818529;Q822925;Q828750;Q824145;Q832894;Q837009;Q831167;Q823353;Q867801;Q833989;」なんていう値を持つキーを見つけました。
具体的には
// =========================================================================== // IEの更新内容を取得する // =========================================================================== function GetIEUpdate(): string; const IE_KEY = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings'; MINOR_VERSION = 'MinorVersion'; var Reg: TRegistry; begin Result := ''; Reg := TRegistry.Create; try // ルートキーを設定して Reg.RootKey := HKEY_LOCAL_MACHINE; // 説明書どおりのキーを開く(ない場合に作らないように) if Reg.OpenKeyReadOnly(IE_KEY) then begin Result := Reg.ReadString(MINOR_VERSION); end; finally Reg.Free; end; end;
画面解像度の取得 | TOP |
参考サイト
// =========================================================================== // 画面の表示能力 // http://homepage1.nifty.com/MADIA/delphi/Win32API/kaizoudo.htm // http://www.borland.co.jp/tips/delphi/dh008/ // =========================================================================== function GetScreenAbility(): string; var DesktopWND: HWND; DesktopDC: HDC; begin // デスクトップのデバイスコンテキストハンドルを取得 DesktopWND := GetDesktopWindow; DesktopDC := GetDC(DesktopWND); // 画面能力を取得 try Result := Format('%dpx(%dmm)×%dpx(%dmm) %dbits',[ GetDeviceCaps(DesktopDC, HORZRES), GetDeviceCaps(DesktopDC, HORZSIZE), GetDeviceCaps(DesktopDC, VERTRES), GetDeviceCaps(DesktopDC, VERTSIZE), GetDeviceCaps(DesktopDC, BITSPIXEL) ]); finally ReleaseDC(DesktopWND, DesktopDC); end; end;
メモリに関する情報の取得 | TOP |
物理メモリとかページファイルとかのアレです。参考サイトを以下に。
(※2005/02/19)なぜ関数にしているんだろう。しかも戻り値に関する処理がコレッポッチもない。
// =========================================================================== // メモリの情報 // http://hp.vector.co.jp/authors/VA009712/take/delphi/kabesys.htm#getmemory // http://forum.nifty.com/fdelphi/samples/01380.html // http://community.borland.com/article/0,1410,16582,00.html // ===========================================================================function GetMemoryStatus(var Phys, Page, Virt: string): string;procedure GetMemoryStatus(var Phys, Page, Virt: string); var MemoryStatus: TMemoryStatus; begin // メモリ情報を得る FillChar(MemoryStatus, SizeOf(MemoryStatus), 0); MemoryStatus.dwLength := SizeOf(TMemoryStatus); GlobalMemoryStatus(MemoryStatus); // 取り出し with MemoryStatus do begin Phys := Format('全体 %s | 使用 %s | 空き %s', [B2KB(dwTotalPhys), B2KB(dwTotalPhys - dwAvailPhys), B2KB(dwAvailPhys)]); Page := Format('全体 %s | 使用 %s | 空き %s', [B2KB(dwTotalPageFile), B2KB(dwTotalPageFile - dwAvailPageFile), B2KB(dwAvailPageFile)]); Virt := Format('全体 %s | 使用 %s | 空き %s', [B2KB(dwTotalVirtual), B2KB(dwTotalVirtual - dwAvailVirtual), B2KB(dwAvailVirtual)]); end; end;
こんな感じですか? とりあえずまるままコピーというのは避けています。さすがに。似たようなもんですけど。それから、全てエラー処理が適当すぎます。でも失敗しても別にねぇ。
ディスクに関する情報の取得 | TOP |
コレはやったことがあります。が、原典の表示が全くないので改めて調べなおしてみました。ここでは、ディスクに関する情報として、、最低限、全ドライブの表示、ディスクの種類、全容量、空き容量、ファイルシステム名称、それからシステムドライブかどうかを取得するものとします。それ以外に何か表示できるものがあればそれはそれとします。
途中ですが、今日はココまでにします。
続きです。よいかんじのページを見つけたりしました。
// =========================================================================== // ドライブの情報 // http://www.borland.co.jp/qanda/delphi/d0009389.html // http://homepage1.nifty.com/MADIA/delphi/Win32API/GetDrives.htm // http://forum.nifty.com/fdelphi/faq/00116.htm // http://www.borland.co.jp/qanda/delphi/d0002383.html // http://hp.vector.co.jp/authors/VA009712/take/delphi/kabesys.htm#gethdd // http://www.users.gr.jp/ml/archive/viewer.aspx?name=delphi&no=24099 // =========================================================================== function GetDriveStatus(): string; // --------------------------------------------- // システムドライブの取得 function GetSystemDrive(): char; var s: string; begin s := ExtractFileDrive(GetWindowsDirectory()); if (s <> '') then Result := s[1] else Result := #0; end; // --------------------------------------------- // 利用可能なドライブ文字列の列挙 function AvailableDrives(): string; var ld: DWORD; i: integer; begin Result := ''; ld := GetLogicalDrives; for i := 0 to 25 do begin if (ld and (1 shl i)) > 0 then Result := Result + (Char(Ord('A') + i)); end; end; // --------------------------------------------- // ディスクドライブの種類を取得 function GetDriveType(Drive: Char): string; var DriveType: Byte; begin DriveType := Windows.GetDriveType(PChar(Drive + ':\')); case DriveType of DRIVE_REMOVABLE: Result := 'REMOVABLE '; DRIVE_FIXED : Result := 'HARDDISK '; DRIVE_REMOTE : Result := 'NETWORK_DRIVE '; DRIVE_CDROM : Result := 'CD-ROM '; DRIVE_RAMDISK : Result := 'RAMDISK '; end; end; // --------------------------------------------- // ボリューム名の取得 function GetVolumeName(Drive: Char): string; var shfi: TSHFileInfo; begin SHGetFileInfo(PChar(Drive + ':\'), 0, shfi, SizeOf(shfi), SHGFI_DISPLAYNAME); Result := shfi.szDisplayName; end; // --------------------------------------------- // ドライブ文字列をDiskFree/DiskSizeで使用できる数値表示に変換 function DriveCharToByte(Drive: Char): Byte; const DRIVES = '#ABCDEFGHIJKLMNOPQRSTUVWXYZ'; begin //カレントドライブ=0、A=1、B=2、C=3、 Result := Pos(UpCase(Drive), DRIVES) - 1; end; // --------------------------------------------- // 指定ディスクの総容量(バイト)取得 function GetDiskSize(Drive: Char): Int64; begin Result := DiskSize(DriveCharToByte(Drive)); end; // --------------------------------------------- // 指定ディスクの空き容量(バイト)取得 function GetDiskFree(Drive: Char): Int64; begin Result := DiskFree(DriveCharToByte(Drive)); end; // --------------------------------------------- // ファイルシステムなど function GetFileSystem(Drive: Char): string; const BUF_SIZE = 260; var VolumeNameBuffer: array[0..BUF_SIZE-1] of char; VolumeSerialNumber: DWORD; MaximumComponentLength: DWORD; FileSystemFlags: DWORD; FileSystemNameBuffer: array[0..BUF_SIZE-1] of char; begin if (Trim(GetDriveType(Drive)) <> 'HARDDISK') then Result := '' else begin GetVolumeInformation( PChar(Drive + ':\'), VolumeNameBuffer, BUF_SIZE, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, FileSystemNameBuffer, BUF_SIZE ); Result := FileSystemNameBuffer; end; end; var Mode: Word; Drives, Line: string; Drive, SysDrive, Check: char; i: integer; Total, Avail: Int64; begin Mode := SetErrorMode(SEM_FAILCRITICALERRORS); Result := ''; SysDrive := GetSystemDrive(); Drives := AvailableDrives(); for i := 1 to Length(Drives) do begin Drive := Drives[i]; if (Drive = SysDrive) then Check := '*' else Check := ' '; Total := GetDiskSize(Drive); Avail := GetDiskFree(Drive); Line := Format('%s:\(%s) (%s) %s %s | 全体 %s | 使用 %s | 空き %s', [Drive, Check, GetDriveType(Drive), GetVolumeName(Drive), GetFileSystem(Drive), B2KB(Total), B2KB(Total - Avail), B2KB(Avail) ]); Result := Result + #13#10 + Line; end; Result := Trim(Result); SetErrorMode(Mode); end;
いわゆるかき集めただけです。ところで、お手本のプログラムでは「OEM Manufacturer」「OEM Model」なるものが表示されているのですが、今使っている何かからは取得できないようですので、飛ばします。意味もわかりませんし。
というところで、PC情報に関してはここまでとします。どこまでがPC情報か、というのは微妙なところですが...。次はCPU情報にうつります。手掛かりがなさそうで力尽きる予感がしますが。
EOF | TOP |