none
Windows10でのメッセージボックスアイコンの取得方法を知りたい RRS feed

  • 質問

  • お世話になっております。

    今回、C#で独自ダイアログを作るためにメッセージボックスアイコンを取得しようとしています。

    System.Drawing.SystemIconsで取得できることは知っていますが、

    Win10で実行してもWin7のアイコンが返されます(試してませんがおそらくWin8.1でも同様?)

    Win10に限らず、実行しているWindowsのメッセージボックスのアイコンを確実に取得する方法はありますでしょうか。

    ※マネージドだけでなくWinAPIの使用も可ですがサードパーティライブラリは使用できません。

    .NET Framework = 4.6.2

    2019年9月13日 2:51

回答

すべての返信

  • SHGetStockIconInfo API でどうでしょう。

    第一引数に SIID_WARNING とか SIID_INFO とか SIID_ERROR とか SIID_HELP とか。

    使い方はこんな感じです(盾アイコンの例ですが)。

    • 回答としてマーク Pon骨 2019年9月13日 6:50
    2019年9月13日 3:15
  • りがとうございます!

    完璧に取得できました。

    一覧を見るとメッセージボックス以外のシステムアイコンも取得できるようなので、活用させていただきたいと思います。

    #なぜSystemIconsはこれを返す仕様ではないのか…

    2019年9月13日 6:51
  • 質問の本題については、魔界の仮面弁士さんが回答されている通りですが、「独自ダイアログを作るために」とのことですので、参考になれば。

    Windows Vista以降にはメッセージボックスに変わるカスタマイズ可能なダイアログ機能としてTask Dialogが追加されています。目的に合致するかもしれません。Windows APIとしては簡易的なTaskDialog関数と全機能使用可能なTaskDialogIndirect関数が用意されています。

    サードパーティライブラリが使用できないとのことですが、当初Microsoft社が制作したWindowsAPICodePackが現在は引き継がれてWindowsAPICodePack-Coreとして公開されています。(Microsoft.WindowsAPICodePack.Dialogs.TaskDialogクラス)

    2019年9月13日 7:38
  • ありがとうございます。

    そちらも知っていて、まだ使う機会はないですが引き継がれていたのは知らなかったので参考にさせていただきます。

    ここからは経緯のお話で蛇足となりますが、

    厳密にはストアアプリ(UWP)のMessageDialogをWinForms/WPFデスクトップアプリでも使いたくて

    それ風味のフルスクリーンメッセージを表示するクラスを自作してしまおうということでした(XAML製)


    どうせ自作するならと、WinForms/WPFのMessageBox.Showを置き換えられるようにしようとした結果

    MessageBoxIcon(MessageBoxImage)に対応させるため、アイコンが必要となったわけです。

    #あくまで「風味」ですからアイコンを出せても良いよね?ということで…

    2019年9月13日 8:18