[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 |