アイコンハンドルから WPF 用のアイコンを取得する


アプリケーションのアイコンを WPF で使用するには,アイコンハンドルから ImageSource を生成します。

ImageSource source = Imaging.CreateBitmapSourceFromHIcon(iconHandle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Image image =  new Image()
{
	Source = source
};

アイコンハンドルの取得方法は目的によって異なりますが,たとえば起動している任意のウィンドウハンドルからアイコンハンドルを取得するには次のようにします。

const int GCL_HICONSM = -34;  // 小サイズアイコンを選択する。
IntPtr iconHandle = GetClassLongPtr(windowHandle, GCL_HICONSM);

[DllImport("user32.dll")]
private static extern IntPtr GetClassLongPtr(IntPtr hWnd, int nIndex);

GetClassLongPtr を使用する場合は,コンパイル条件を Any CPU にすることで, 32bit/64bit のいずれのプラットフォームにも対応させることができます。 WPF アプリケーションのデフォルトは 32bit がターゲットとなっているので注意が必要です。