public static void DumpConsoleInfo(TextWriter tw, string path) { var lnk = new CoShellLink(); var data = (IShellLinkDataList)lnk; var file = (IPersistFile)lnk; file.Load(path, (int)STGM.Read); IntPtr block; int rc = data.CopyDataBlock(CoShellLink.NT_CONSOLE_PROPS_SIG, out block); if (rc != 0) { throw new Win32Exception("CopyDataBlock failed. " + rc.ToString("X")); } int size = Marshal.ReadInt32(block); var res = Marshal.PtrToStructure <NT_CONSOLE_PROPS>(block); tw.WriteLine("Flags: {0}", GetFlags(path)); DumpMember(tw, res, p => p.bAutoPosition); DumpMember(tw, res, p => p.bFullScreen); DumpMember(tw, res, p => p.bHistoryNoDup); DumpMember(tw, res, p => p.bInsertMode); DumpMember(tw, res, p => p.bQuickEdit); DumpMember(tw, res, p => p.nInputBufferSize); DumpMember(tw, res, p => p.uCursorSize); DumpMember(tw, res, p => p.FaceName, GetString(res.FaceName)); DumpMember(tw, res, p => p.nFont); DumpMember(tw, res, p => p.uFontFamily); DumpMember(tw, res, p => p.uFontWeight); DumpMember(tw, res, p => p.dwFontSize); DumpMember(tw, res, p => p.uHistoryBufferSize); DumpMember(tw, res, p => p.uNumberOfHistoryBuffers); DumpMember(tw, res, p => p.wFilleAttribute); DumpMember(tw, res, p => p.wPopupFillAttribute); DumpMember(tw, res, p => p.dwScreenBufferSize); DumpMember(tw, res, p => p.dwWindowOrigin); DumpMember(tw, res, p => p.dwWindowSize); for (var i = 0; i < res.ColorTable.Length; i++) { tw.WriteLine("ColorTable[{0}]: RGB({1},{2},{3}), #{1:X}{2:X}{3:X}", i, res.ColorTable[i].R, res.ColorTable[i].G, res.ColorTable[i].B); } Marshal.FreeHGlobal(block); Marshal.ReleaseComObject(data); Marshal.ReleaseComObject(file); Marshal.ReleaseComObject(lnk); }
public static void RmProps(string path) { var lnk = new CoShellLink(); var data = (IShellLinkDataList)lnk; var file = (IPersistFile)lnk; file.Load(path, (int)STGM.Read); data.RemoveDataBlock(CoShellLink.NT_CONSOLE_PROPS_SIG); file.Save(path, true); Marshal.ReleaseComObject(data); Marshal.ReleaseComObject(file); Marshal.ReleaseComObject(lnk); }
public static string GetFlags(string path) { var lnk = new CoShellLink(); var data = (IShellLinkDataList)lnk; var file = (IPersistFile)lnk; file.Load(path, (int)STGM.Read); var flags = data.GetFlags(); Marshal.ReleaseComObject(data); Marshal.ReleaseComObject(file); Marshal.ReleaseComObject(lnk); return(flags.ToString()); }