リソース (Windows)

Microsoft Windowsにおけるリソース（）には、いくつかの意味がある。

 計算資源としてのリソース 
コンピュータの計算資源のことを意味する用語としてリソースが使われる。Windows Vista以降には、というシステムアプリケーションが標準搭載されており、CPUやメインメモリ、ネットワークの使用状況などを監視することができる。

 埋め込みデータとしてのリソース 
リソースは、実行ファイル (EXE) やダイナミックリンクライブラリ (DLL) に埋め込まれた読み込み専用のデータである。Portable Executableフォーマットにはリソース用の領域が存在する。

Windows APIでは、アプリケーションソフトウェアに含まれるリソースにアクセスする抽象化された方法を提供している。

 種類 
各リソースは型と名前を持ち、どちらも数値識別子か文字列である。

Windowsには予め定義されたリソースの型として以下のものがある。
 カーソルおよびアニメーション動作するカーソル
 アイコン 
 ビットマップ
 ダイアログボックスのテンプレート
 フォント
 HTML文書
 文字列とメッセージテンプレート
 バージョン情報

プログラマは独自リソースの型を新たに定義することもできる。

C言語およびC++によるWin32デスクトップアプリケーション開発では、リソーススクリプトと呼ばれるテキストファイルを用いて上記リソースを記述するリソース ファイル (C++) | Microsoft Learn。Microsoft Visual Studioにはリソースエディターが搭載されており、GUIを使用して直感的にリソーススクリプトを編集することもできるリソース エディター (C++) | Microsoft Learn。.NET Frameworkによる開発では、より抽象化・洗練されており、主にXMLリソースファイル（.resx）を使用してアセンブリのリソースを記述するCreate resource files - .NET | Microsoft Learn。さらにWPFでは、コントロールやスタイルなどのリソースをXAMLで記述することができるXAML resources overview - WPF .NET | Microsoft LearnHow to define and reference a resource - WPF .NET | Microsoft Learn。

その他、マニフェストリソースと呼ばれるXML形式のリソースファイルもある。こちらはビジュアルスタイルの有効化Enabling Visual Styles - Win32 apps | Microsoft Learn、UACの権限昇格要求常に管理者としてアプリケーションを実行させるには？［C#、VB、VS 2008］ - ＠ITやDPIスケーリングSetting the default DPI awareness for a process (Windows) - Win32 apps | Microsoft Learnなど、OSの機能に対するアプリケーションの振る舞いを宣言するために使われる。Microsoft Visual C++では、リンカーオプションでマニフェストリソースをアプリケーションバイナリに結合できるが、プロジェクトファイル（.vcxproj）によってマニフェスト項目を設定したり、C/C++のソースファイル中に#pragma commentディレクティブを使ってマニフェスト項目を記述したりすることもできる/MANIFESTDEPENDENCY (Specify Manifest Dependencies) | Microsoft Learn。

日本語や英語といった言語ごとにリソースを用意し、システムの言語設定に応じてUIをローカライズすることもできる。言語ごとのリソースのみを含むDLL（サテライトDLLまたはサテライトアセンブリ）を用意し、アプリケーションコードによって明示的に言語リソースを選択することもできるCreating a resource-only DLL | Microsoft LearnCreate satellite assemblies - .NET | Microsoft Learn。

 使用法 
Windowsがプログラムファイルに対応して表示するアイコンはEXEファイル内の最初のアイコンリソースである。EXEファイル内にアイコンリソースがない場合、標準のアイコンが表示される。

 サードパーティー製のリソースエディター 
EXEファイルやDLLファイルに埋め込まれたリソースを編集できるサードパーティー製のエディターがいくつかある。一般にアプリケーション内の文字列を別の言語に変換、アイコンやビットマップを変更、ショートカットキーの割り当てを変更するのに使う。

編集した影響でアプリケーションが正常に動作しなくなることもあり無保証である。

 リソーエディタ (RisohEditor) (オープンソース)
 XN Resource Editor 非公式版 (オープンソース)
 Resource Hacker (フリーウェア)
 Resource Tuner (シェアウェア)

 システムリソース 
システムリソースとはWindowsおよびアプリケーションが使用するKERNELリソース、USERリソース、GDIリソースと呼ばれるメモリ領域のことである。アプリケーションを管理するのがKERNELリソース、ダイアログボックスやウインドウなどの情報を格納するのがUSERリソース、フォントやビットマップ、アイコンなどの情報を格納するのがGDIリソースである。一般に起動しているアプリケーションが多いと使用するシステムリソースも多くなる。システムリソースの残量として表示されるのはいずれかの少ない方の容量でリソース不足になるとウインドウを開くことが出来なくなったりフリーズなどの不具合が発生する。

システムリソースという用語は16ビットオペレーティングシステム (OS) であるWindows 3.x系で初めて登場した。Windows 3.0ではUSERとGDIの２つのリソースがありそれぞれ64KBのサイズであった。このサイズは16ビットCPUの1つのセグメントの大きさでありパフォーマンス上の理由でこのサイズとなった。しばしば勘違いされるがシステムリソースはWindowsで導入されたものであり64KBの制限はパフォーマンスを考慮した設計上の理由であるためMS-DOSやその互換性による制限ではない。Windows 3.1では容量不足の問題を解決するためUSERが128KBに拡張され利用方法の工夫でより少ないシステムリソースを使用するように改善された。

32ビットOSであるWindows 9x系ではシステムリソースが32ビット化され、2つのUSERリソースと1つのGDIリソースがそれぞれ2MB、合計で6MBの容量となった。しかし32ビットのシステムリソースは32ビットWindowsアプリケーションでしか使えず、16ビットWindowsアプリケーションと一部のOSの機能は互換性の理由で容量の少ない16ビットのシステムリソースを使用するため、多くのメモリを搭載していたとしても依然としてリソース不足になることがあった。つまりWindows 9x系で問題となるリソース不足は16ビットのシステムリソース不足のことであるWindowsのシステムリソース解説 Back to the 1999。

Windows NT系のOSではシステムリソースは存在せず、同等の役目をするのはデスクトップヒープもしくはデスクトップアプリケーションヒープである。

 ツール 
 リソースメーター

 脚注 

Category:Microsoft Windows
Category:MS-DOS・Windows 3.x・9x系