| history | TOP |
2006/12/21:作成
| はじめに | TOP |
The Code Project を流し読みしていると、こんな記事がありました。
やっていることは、レジストリのそれなりの場所を読み出しているだけですが、最近プログラミングから徐々に遠ざかってしまっている身にしてみると、チョットしたリハビリになりそうなので、Delphi に翻訳してみました。
| ダウンロード | TOP |
XpHotFixCheker20061221.zip(71,627Bytes) ソースコードと実行ファイルです。
今回は、コンソールアプリケーションにしてみたので、サイズが小さくなっています。でも、本筋と関係ない内容を出力しようとして、サイズを無駄遣いしています。それに、レジストリアクセスのために横着して Registry を uses してしまったので、これまたサイズが大きい原因となっています。
| サンプル | TOP |
今使っているノートパソコンで実行してみると、こんな感じになります。定期的に WindowsUpdate を行っているので結構たまってきています。
WindowsXP HotFix情報取得サンプル XpHotFixChecker.exe Ver.0.6.12.21 Windows XP Home Edition Service Pack 2 (Build 2600) [KB867282] Windows XP ホットフィックス - KB867282 [KB873339] Windows XP ホットフィックス - KB873339 [KB885250] Windows XP ホットフィックス - KB885250 [KB885835] Windows XP ホットフィックス - KB885835 [KB885836] Windows XP ホットフィックス - KB885836 [KB885884] Windows XP ホットフィックス - KB885884 [KB886185] Windows XP ホットフィックス - KB886185 [KB886677] Windows XP ホットフィックス - KB886677 [KB887472] Windows XP ホットフィックス - KB887472 [KB887742] Windows XP ホットフィックス - KB887742 [KB888113] Windows XP ホットフィックス - KB888113 [KB888302] Windows XP ホットフィックス - KB888302 [KB890046] Windows XP セキュリティ更新 (KB890046) [KB890047] Windows XP ホットフィックス - KB890047 [KB890175] Windows XP ホットフィックス - KB890175 [KB890859] Windows XP ホットフィックス - KB890859 [KB890923] Windows XP ホットフィックス - KB890923 [KB891781] Windows XP ホットフィックス - KB891781 [KB893066] Windows XP セキュリティ更新 (KB893066) [KB893086] Windows XP ホットフィックス - KB893086 [KB893756] Windows XP セキュリティ更新 (KB893756) [KB893803] Windows Installer 3.1 [KB893803v2] Windows Installer 3.1 [KB894391] Windows XP 更新 (KB894391) [KB896358] Windows XP セキュリティ更新 (KB896358) [KB896422] Windows XP セキュリティ更新 (KB896422) [KB896423] Windows XP セキュリティ更新 (KB896423) [KB896424] Windows XP セキュリティ更新 (KB896424) [KB896428] Windows XP セキュリティ更新 (KB896428) [KB896688] Windows XP セキュリティ更新 (KB896688) [KB898461] Windows XP 更新 (KB898461) [KB899587] Windows XP セキュリティ更新 (KB899587) [KB899591] Windows XP セキュリティ更新 (KB899591) [KB900485] Windows XP 更新 (KB900485) [KB900725] Windows XP セキュリティ更新 (KB900725) [KB901017] Windows XP セキュリティ更新 (KB901017) [KB901190] Windows XP セキュリティ更新 (KB901190) [KB901214] Windows XP セキュリティ更新 (KB901214) [KB902400] Windows XP セキュリティ更新 (KB902400) [KB904706] Windows XP セキュリティ更新 (KB904706) [KB904942] Windows XP 更新 (KB904942) [KB905414] Windows XP セキュリティ更新 (KB905414) [KB905749] Windows XP セキュリティ更新 (KB905749) [KB905915] Windows XP セキュリティ更新 (KB905915) [KB908519] Windows XP セキュリティ更新 (KB908519) [KB908531] Windows XP セキュリティ更新 (KB908531) [KB910437] Windows XP 更新 (KB910437) [KB911280] Windows XP セキュリティ更新 (KB911280) [KB911562] Windows XP セキュリティ更新 (KB911562) [KB911564] Windows Media Player (KB911564) セキュリティ問題の修正プログラム [KB911565] Windows Media Player 10 (KB911565) セキュリティ問題の修正プログラム [KB911567] Windows XP セキュリティ更新 (KB911567) [KB911927] Windows XP セキュリティ更新 (KB911927) [KB912812] Windows XP セキュリティ更新 (KB912812) [KB912919] Windows XP セキュリティ更新 (KB912919) [KB913446] Windows XP セキュリティ更新 (KB913446) [KB913580] Windows XP セキュリティ更新 (KB913580) [KB914388] Windows XP セキュリティ更新 (KB914388) [KB914389] Windows XP セキュリティ更新 (KB914389) [KB914440] Windows XP ホットフィックス (KB914440) [KB915865] Hotfix for Windows XP (KB915865) [KB916281] Windows XP セキュリティ更新 (KB916281) [KB916595] Windows XP 更新 (KB916595) [KB917159] Windows XP セキュリティ更新 (KB917159) [KB917344] Windows XP セキュリティ更新 (KB917344) [KB917422] Windows XP セキュリティ更新 (KB917422) [KB917734_WMP10] Windows Media Player 10 (KB917734) セキュリティ問題の修正プログラム [KB917953] Windows XP セキュリティ更新 (KB917953) [KB918439] Windows XP セキュリティ更新 (KB918439) [KB918899] Windows XP セキュリティ更新 (KB918899) [KB919007] Windows XP セキュリティ更新 (KB919007) [KB920213] Windows XP セキュリティ更新 (KB920213) [KB920214] Windows XP セキュリティ更新 (KB920214) [KB920670] Windows XP セキュリティ更新 (KB920670) [KB920683] Windows XP セキュリティ更新 (KB920683) [KB920685] Windows XP セキュリティ更新 (KB920685) [KB920872] Windows XP 更新 (KB920872) [KB921398] Windows XP セキュリティ更新 (KB921398) [KB921883] Windows XP セキュリティ更新 (KB921883) [KB922582] Windows XP 更新 (KB922582) [KB922616] Windows XP セキュリティ更新 (KB922616) [KB922760] Windows XP セキュリティ更新 (KB922760) [KB922819] Windows XP セキュリティ更新 (KB922819) [KB923191] Windows XP セキュリティ更新 (KB923191) [KB923414] Windows XP セキュリティ更新 (KB923414) [KB923689] Windows XP (KB923689) セキュリティ問題の修正プログラム [KB923694] Windows XP セキュリティ更新 (KB923694) [KB923980] Windows XP セキュリティ更新 (KB923980) [KB924191] Windows XP セキュリティ更新 (KB924191) [KB924270] Windows XP セキュリティ更新 (KB924270) [KB924496] Windows XP セキュリティ更新 (KB924496) [KB925398_WMP64] Windows Media Player 6.4 (KB925398) セキュリティ問題の修正プログラム [KB925486] Windows XP セキュリティ更新 (KB925486) [KB926255] Windows XP セキュリティ更新 (KB926255) [Q147222] Found 95 Hot-Fix
| しくみ | TOP |
「ファイル名を指定して実行」で「regedit」と入力してレジストリエディタを立ち上げて
HKEY_LOCAL_MACHINE¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥HotFix
にアクセスしてみれば、そこにホットフィックスの一覧があるのが確認できます。また画面右側の「Fix Description」や「Comments」といったキーの値に、そのホットフィックスのもう少しだけましな説明が書いてあるのがわかります。
これらの値を Delphi で読み出しているだけです。オリジナルより少しだけましなのは、「Fix Description」ではなく「Comments」を読み出している点だけです。
| ソースコード | TOP |
このページでは説明していない関数を使っていますが、本題ではないので暇で暇で仕方がないときにソースコードを参照するとして、上で説明した内容を実行している部分を載せておきます。
const
KEY_HOTFIX = 'Software\Microsoft\Windows NT\CurrentVersion\HotFix';
var
LRegistry: TRegistry;
LEnumKeys: TStringList;
i: Integer;
LSubKey: String;
LHotFixName: String;
begin
// EXE情報出力
Writeln(GetVersionInfo('FileDescription', ParamStr(0)));
Writeln(
ExtractFileName(ParamStr(0))
+ ' ' + Format('Ver.%s', [GetVersionInfo('FileVersion', ParamStr(0))])
);
Writeln;
// OSバージョン出力
Writeln(StringReplace(GetOsInfo(), 'Microsoft ', '', []));
Writeln;
// HotFix一覧出力
LRegistry := TRegistry.Create();
LEnumKeys := TStringList.Create();
try
// ルートキーを設定
LRegistry.RootKey := HKEY_LOCAL_MACHINE;
// 読み取り専用で開く
if (LRegistry.OpenKeyReadOnly(KEY_HOTFIX)) then
begin
try
// 配下のキーを列挙
LRegistry.GetKeyNames(LEnumKeys);
finally
// レジストリを閉じる
LRegistry.CloseKey();
end;
// 配下のキーを読み出せた場合
for i := 0 to LEnumKeys.Count - 1 do
begin
// キーの名称を取り出して
LSubKey := LEnumKeys.Strings[i];
// 改めて読み取り専用で開く
if (LRegistry.OpenKeyReadOnly(KEY_HOTFIX + '\' + LSubKey)) then
begin
try
// オリジナルのソースでは 'Fix Description' にアクセスしている
//LHotFixName := LRegSub.ReadString('Fix Description');
// 少なくとも日本語版では 'Comments' の方が情報量が多い
LHotFixName := '[' + LSubKey + '] ' + LRegistry.ReadString('Comments');
// コンソールに出力
WriteLn(LHotFixName);
finally
// 閉じる
LRegistry.CloseKey();
end;
end;
end;
end;
Writeln;
Writeln(Format('Found %d Hot-Fix', [LEnumKeys.Count]));
finally
LRegistry.Free();
LEnumKeys.Free();
end;
// 即終了するのをせきとめる
//Readln;
end.
| EOF | TOP |