Как уже говорили другие, SystemIcons
- это класс, который должен содержать эти значки, но в Windows 8.1 (и, возможно, в более ранних версиях) значки, присутствующие в SystemIcons
, отличаются от тех, которые отображаются в MessageBoxes
в случай звездочки, информация и вопрос. Значки в диалоговом окне выглядят намного более плоскими . См., Например, значок вопроса:
Значок в диалоговом окне является значком собственного диалогового окна, а самый левый значок в форме на заднем плане - это значок, полученный из класса SystemIcons
.
Различные методы и подробности о том, как получить значок из MessageBox, см. В этом ответе , но я приведу здесь краткое резюме, просто для полноты:
Вы должны использовать функцию SHGetStockIconInfo
:
SHSTOCKICONINFO sii = new SHSTOCKICONINFO();
sii.cbSize = (UInt32)Marshal.SizeOf(typeof(SHSTOCKICONINFO));
Marshal.ThrowExceptionForHR(SHGetStockIconInfo(SHSTOCKICONID.SIID_INFO,
SHGSI.SHGSI_ICON ,
ref sii));
pictureBox1.Image = Icon.FromHandle(sii.hIcon).ToBitmap();
Пожалуйста Примечание :
Если эта функция возвращает дескриптор значка в элементе hIcon
SHSTOCKICONINFO структура, на которую указывает psii, вы несете ответственность за
освобождая значок с помощью DestroyIcon , когда он вам больше не нужен.
Конечно, чтобы это работало, вам нужно определить несколько перечислений и структур:
public enum SHSTOCKICONID : uint
{
//...
SIID_INFO = 79,
//...
}
[Flags]
public enum SHGSI : uint
{
SHGSI_ICONLOCATION = 0,
SHGSI_ICON = 0x000000100,
SHGSI_SYSICONINDEX = 0x000004000,
SHGSI_LINKOVERLAY = 0x000008000,
SHGSI_SELECTED = 0x000010000,
SHGSI_LARGEICON = 0x000000000,
SHGSI_SMALLICON = 0x000000001,
SHGSI_SHELLICONSIZE = 0x000000004
}
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHSTOCKICONINFO
{
public UInt32 cbSize;
public IntPtr hIcon;
public Int32 iSysIconIndex;
public Int32 iIcon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260/*MAX_PATH*/)]
public string szPath;
}
[DllImport("Shell32.dll", SetLastError = false)]
public static extern Int32 SHGetStockIconInfo(SHSTOCKICONID siid, SHGSI uFlags, ref SHSTOCKICONINFO psii);