/// <summary> /// Internally saves the icon to the specified stream. /// </summary> /// <param name="stream">Stream to save.</param> /// <returns>True if successful.</returns> /// <remarks></remarks> private bool _internalSaveToStream(Stream stream) { bool _internalSaveToStreamRet = default; var bl = new SafePtr(); int f = Marshal.SizeOf(_dir); int g = Marshal.SizeOf <ICONDIRENTRY>(); _dir.nImages = (short)_entries.Count; _dir.wIconType = IconImageType.Icon; _dir.wReserved = 0; // get the index to the first image's image data int offset = f + g * _dir.nImages; bl = bl + FileTools.StructToBytes(_dir); foreach (var e in _entries) { e._entry.dwOffset = offset; bl = bl + FileTools.StructToBytes(e._entry); offset += e._entry.dwImageSize; } foreach (var e in _entries) { bl = bl + e._image; } // write the icon file stream.Write((byte[])bl, 0, (int)bl.Length); stream.Close(); bl.Dispose(); _internalSaveToStreamRet = true; return(_internalSaveToStreamRet); }
/// <summary> /// Internal load from bytes. /// </summary> /// <param name="bytes"></param> /// <returns></returns> /// <remarks></remarks> private bool _internalLoadFromBytes(byte[] bytes) { bool _internalLoadFromBytesRet = default; SafePtr mm = (SafePtr)bytes; _internalLoadFromBytesRet = _internalLoadFromPtr(mm); mm.Dispose(); return(_internalLoadFromBytesRet); }
public static string GetMenuItemText(IntPtr hMenu, int itemId, bool byPos = true) { var mii = new MENUITEMINFO(); var mm = new SafePtr(); mii.cbSize = Marshal.SizeOf(mii); mii.cch = 0; mii.fMask = User32.MIIM_TYPE; User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii); mm.Length = (mii.cch + 1) * sizeof(char); mii.cch += 1; mii.dwTypeData = mm.handle; if (User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii) == 0) { int err = User32.GetLastError(); mm.Length = 1026L; mm.ZeroMemory(); User32.FormatMessage(0x1000U, IntPtr.Zero, (uint)err, 0U, mm.handle, 512U, IntPtr.Zero); mm.Dispose(); return(null); } if ((mii.fType & User32.MFT_SEPARATOR) == User32.MFT_SEPARATOR) { return("-"); } else { string s; s = mm.ToString(); mm.Dispose(); return(s); } }
/// <summary> /// Format a given system error, or the last system error by default. /// </summary> /// <param name="syserror">Format code to pass. GetLastError is used as by default.</param> /// <returns></returns> /// <remarks></remarks> public static string FormatLastError(uint syserror = 0U) { uint err = syserror == 0L ? (uint)User32.GetLastError() : syserror; var mm = new SafePtr(); string s; mm.Length = 1026L; mm.ZeroMemory(); User32.FormatMessage(0x1000, IntPtr.Zero, err, 0U, mm.handle, 512U, IntPtr.Zero); s = "Error &H" + err.ToString("X8") + ": " + mm.ToString(); mm.Dispose(); return(s); }
private bool disposedValue; // To detect redundant calls // IDisposable protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { if (_mem is object) { _mem.Dispose(); } } } disposedValue = true; }
/// <summary> /// Copy a native hMenu and all its contents into a managed Menu object /// </summary> /// <param name="hMenu"></param> /// <param name="destItem"></param> /// <returns></returns> /// <remarks></remarks> public static bool MenuItemCopyToManaged(IntPtr hMenu, int itemId, ref ToolStripMenuItem destItem, bool byPos = true) { var mii = new MENUITEMINFO(); Bitmap bmp; var mm = new SafePtr(); if (destItem is null) { destItem = new ToolStripMenuItem(); } mii.cbSize = Marshal.SizeOf(mii); mii.cch = 0; mii.fMask = User32.MIIM_TYPE; User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii); mm.Length = (mii.cch + 1) * sizeof(char); mii.cch += 1; mii.dwTypeData = mm.handle; if (User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii) == 0) { int err = User32.GetLastError(); mm.Length = 1026L; mm.ZeroMemory(); User32.FormatMessage(0x1000U, IntPtr.Zero, (uint)err, 0U, mm.handle, 512U, IntPtr.Zero); mm.Dispose(); return(false); } if ((mii.fType & User32.MFT_SEPARATOR) == User32.MFT_SEPARATOR) { destItem.Text = "-"; } else { destItem.Text = mm.ToString(); } mm.Dispose(); mii.fMask = User32.MIIM_BITMAP; User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii); if (mii.hbmpItem != IntPtr.Zero) { bmp = Image.FromHbitmap(mii.hbmpItem); destItem.Image = bmp; } mii.fMask = User32.MIIM_STATE; User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii); if ((mii.fState & User32.MFS_CHECKED) == User32.MFS_CHECKED) { destItem.CheckState = CheckState.Checked; } if ((mii.fState & User32.MFS_DISABLED) == User32.MFS_DISABLED) { destItem.Enabled = false; } if ((mii.fState & User32.MFS_DEFAULT) == User32.MFS_DEFAULT) { destItem.Font = new Font(destItem.Font.Name, destItem.Font.Size, FontStyle.Bold); } mii.fMask = User32.MIIM_SUBMENU; User32.GetMenuItemInfo(hMenu, itemId, byPos, ref mii); if (mii.hSubMenu != IntPtr.Zero) { return(MenuItemsToManaged(mii.hSubMenu, destItem.DropDownItems)); } return(true); }