Exemplo n.º 1
0
        public SafePtr ToNullTermPtr()
        {
            var b = new SafePtr();

            int i = 0;

            foreach (var s in this)
            {
                i += (s.Length + 1) * sizeof(char);
            }

            i += sizeof(char);

            b.Length = i;


            int idx = 0;

            foreach (var s in this)
            {
                b.SetString(idx, s);
                idx += (s.Length + 1) * sizeof(char);
            }

            return(b);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        public static bool DeleteFile(List <string> lstPaths, bool fShiftKey, IntPtr hwnd)
        {
            string s = MakeFILEOPPATHS(lstPaths);

            if (s.Length > 1)
            {
                using (SafePtr pFrom = new SafePtr(s)) {
                    SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT {
                        hwnd   = hwnd,
                        wFunc  = 3,
                        pFrom  = pFrom,
                        fFlags = fShiftKey ? ((short)0x4000) : ((short)0x40)
                    };
                    try {
                        if (PInvoke.SHFileOperation(ref lpFileOp) == 0)
                        {
                            return(!lpFileOp.fAnyOperationsAborted);
                        }
                    }
                    catch (Exception exception) {
                        QTUtility2.MakeErrorLog(exception);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Returns the BSTR preamble count of strings from the head of the memory buffer.
        /// </summary>
        /// <returns></returns>
        private long BCount()
        {
            if (SafePtr is null || SafePtr.handle == IntPtr.Zero)
            {
                return(0L);
            }
            switch (SizeDescriptorLength)
            {
            case 2:
            {
                return(SafePtr.get_UShortAt(0L));
            }

            case 4:
            {
                return(SafePtr.get_UIntegerAt(0L));
            }

            case 8:
            {
                return((long)SafePtr.get_ULongAt(0L));
            }

            default:
            {
                return(0L);
            }
            }
        }
Exemplo n.º 5
0
        public static StringBlob FromNullTermPtr(IntPtr ptr)
        {
            var sb = new StringBlob();
            var b  = new SafePtr(ptr);

            sb.AddRange(b.GetStringArray(0));
            return(sb);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
 public static bool PasteFile(string pathTarget, IntPtr hwnd)
 {
     try {
         List <string> paths = ClipboardGetFileDropList(hwnd);
         if (paths.Count == 0)
         {
             return(false);
         }
         string s = MakeFILEOPPATHS(paths);
         if (s.Length > 1)
         {
             bool flag;
             if (pathTarget.Length != 3)
             {
                 pathTarget = pathTarget.TrimEnd(new char[] { '\\' });
             }
             pathTarget = GetTargetIfFolderLink(new DirectoryInfo(pathTarget), out flag).FullName;
             if (flag)
             {
                 bool  prefferdDropEffect = GetPrefferdDropEffect(hwnd);
                 short num = 0x40;
                 if (IsTargetPathContained(paths, pathTarget))
                 {
                     num = (short)(num | 8);
                 }
                 using (SafePtr pFrom = new SafePtr(s))
                     using (SafePtr pTo = new SafePtr(pathTarget + '\0')) {
                         SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT {
                             hwnd   = hwnd,
                             wFunc  = prefferdDropEffect ? 1 : 2,
                             pFrom  = pFrom,
                             pTo    = pTo,
                             fFlags = num
                         };
                         try {
                             if (PInvoke.SHFileOperation(ref lpFileOp) == 0)
                             {
                                 return(!lpFileOp.fAnyOperationsAborted);
                             }
                         }
                         catch (Exception exception) {
                             QTUtility2.MakeErrorLog(exception);
                         }
                     }
             }
         }
     }
     catch (Exception exception2) {
         QTUtility2.MakeErrorLog(exception2, null);
     }
     return(false);
 }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Create a bitmap structure with bits from this raw icon image.
        /// </summary>
        /// <returns>An array of bytes that represent data to create a bitmap.</returns>
        /// <remarks></remarks>
        private byte[] _makeBitmap()
        {
            byte[] _makeBitmapRet = default;
            if (!IsPngFormat)
            {
                _makeBitmapRet = _image;
                return(_makeBitmapRet);
            }

            IntPtr bmp  = default;
            var    hbmp = Resources.MakeDIBSection((Bitmap)ToImage(), ref bmp);
            var    mm   = new SafePtr();
            var    bm   = new BITMAPINFOHEADER();
            int    maskSize;
            int    w = _entry.cWidth;
            int    h = _entry.cHeight;

            if (w == 0)
            {
                w = 256;
            }
            if (h == 0)
            {
                h = 256;
            }
            bm.biSize      = 40;
            bm.biWidth     = w;
            bm.biHeight    = h * 2;
            bm.biPlanes    = 1;
            bm.biBitCount  = 32;
            bm.biSizeImage = w * h * 4;
            maskSize       = (int)(Math.Max(w, 32) * h / 8d);
            mm.Alloc(bm.biSizeImage + 40 + maskSize);
            var ptr1 = mm.DangerousGetHandle() + 40;
            var ptr2 = mm.DangerousGetHandle() + 40 + bm.biSizeImage;

            Marshal.StructureToPtr(bm, mm.DangerousGetHandle(), false);
            Native.MemCpy(bmp, ptr1, bm.biSizeImage);
            bm = mm.ToStruct <BITMAPINFOHEADER>();
            _setMask(ptr1, ptr2, w, h);
            _entry.dwImageSize = (int)mm.Length;
            _makeBitmapRet     = (byte[])mm;
            mm.Free();
            NativeShell.DeleteObject(hbmp);
            return(_makeBitmapRet);
        }
Exemplo n.º 10
0
 public static void ShowProperties(byte[] idl, IntPtr hwnd = default(IntPtr))
 {
     using (SafePtr sptr = new SafePtr("properties"))
         using (IDLWrapper wrapper = new IDLWrapper(idl)) {
             if (wrapper.Available)
             {
                 SHELLEXECUTEINFO structure = new SHELLEXECUTEINFO {
                     hwnd     = hwnd,
                     fMask    = 0x40C,
                     lpVerb   = sptr,
                     lpIDList = wrapper.PIDL
                 };
                 structure.cbSize = Marshal.SizeOf(structure);
                 PInvoke.ShellExecuteEx(ref structure);
             }
         }
 }
Exemplo n.º 11
0
        /// <summary>
        /// Refresh the current monitor list.
        /// </summary>
        /// <returns></returns>
        /// <remarks></remarks>
        public bool Refresh()
        {
            bool ret;

            Clear();

            var mm = new SafePtr(IntPtr.Size);

            mm.IntAt(0L) = 1;

            int i = mm.IntAt(0L);

            ret = EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, _enum, mm.handle);

            mm.Free();

            return(ret);
        }
Exemplo n.º 12
0
        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);
            }
        }
Exemplo n.º 13
0
 public static bool DeleteFile(List<string> lstPaths, bool fShiftKey, IntPtr hwnd)
 {
     string s = MakeFILEOPPATHS(lstPaths);
     if(s.Length > 1) {
         using(SafePtr pFrom = new SafePtr(s)) {
             SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT {
                 hwnd = hwnd,
                 wFunc = 3,
                 pFrom = pFrom,
                 fFlags = fShiftKey ? ((short)0x4000) : ((short)0x40)
             };
             try {
                 if(PInvoke.SHFileOperation(ref lpFileOp) == 0) {
                     return !lpFileOp.fAnyOperationsAborted;
                 }
             }
             catch(Exception exception) {
                 QTUtility2.MakeErrorLog(exception);
             }
         }
     }
     return false;
 }
Exemplo n.º 14
0
Arquivo: Fparent.cs Projeto: Dasem/psu
        public void StructOutput(Object _Outparams)
        {
            Outparams    outpar    = (Outparams)_Outparams;
            RichTextBox  outp      = outpar.ForOutForm.richTextBox1;
            OperProgress prbarform = outpar.prbarform;
            Link         temp;
            int          count       = 0;
            int          memory_size = 0;

            for (int j = 0; j < this.sizex; ++j)
            {
                if (!prbarform.IsDisposed)
                {
                    prbarform.InvokeUI(() => { prbarform.progressBar1.Value = count; });
                    count++;
                }
                temp = this.columns[j];
                while (temp.next != null)
                {
                    memory_size += 12;
                    var safeptr = SafePtr.Create(temp.next);
                    outp.AppendText("Элемент " + temp.next.inf + " с координатами X:" + (j + 1) + " Y:" + (1 + temp.next.line_number) + " находится по адресу " + safeptr.IntPtr.ToString("x") + "\n");
                    temp = temp.next;
                }
            }
            if (!prbarform.IsDisposed)
            {
                prbarform.InvokeUI(() => { prbarform.Close(); });
            }
            outp.AppendText("\nОбщий объём памяти, занимаемый матрицой: " + memory_size / 1024.0 + " Кбайт\n");
            if (--this.count_readers == 0)
            {
                Fparent.names_collection[Fparent.names_collection.IndexOf(this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ") (чтение)")] = this.name + " (" + this.sizey.ToString() + "x" + this.sizex.ToString() + ")";
                Program.fr2.InvokeUI(() => { Program.fr2.ComboRefresh(); });
            }
            outpar.ForOutForm.ShowDialog();
        }
Exemplo n.º 15
0
Arquivo: Fparent.cs Projeto: Dasem/psu
 public bool TxtOutputMemory(string path)
 {
     if (Path.GetExtension(path) != ".txt")
     {
         MessageBox.Show("Неверное расширение файла", "Ошибка");
         return(false);
     }
     try
     {
         using (var outp = new StreamWriter(path))
         {
             outp.WriteLine("Вывод расположения элементов в памяти матрицы " + this.name);
             Link temp;
             int  memory_size = 0;
             for (int j = 0; j < this.sizex; ++j)
             {
                 temp = this.columns[j];
                 while (temp.next != null)
                 {
                     memory_size += 12;
                     var safeptr = SafePtr.Create(temp.next);
                     outp.Write("Элемент " + temp.next.inf + " с координатами X:" + (j + 1) + " Y:" + (1 + temp.next.line_number) + " находится по адресу " + safeptr.IntPtr.ToString("x"));
                     outp.WriteLine();
                     temp = temp.next;
                 }
             }
             outp.WriteLine("\nОбщий объём памяти, занимаемый матрицой: " + memory_size / 1024.0 + " Кбайт");
         }
         return(true);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Неверно задан путь к файлу", "Ошибка");
         return(false);
     }
 }
Exemplo n.º 16
0
        /// <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);
        }
Exemplo n.º 17
0
        public static object BytesToEnum(byte[] b, Type t)
        {
            SafePtr sp = b;
            int     x  = Blob.BlobTypeSize(Blob.TypeToBlobType(t.GetEnumUnderlyingType()));

            switch (x)
            {
            case 1:
            {
                if (Native.Unsigned(t))
                {
                    return(Enum.ToObject(t, sp[0L]));
                }
                else
                {
                    return(Enum.ToObject(t, sp.get_SByteAt(0L)));
                }

                break;
            }

            case 2:
            {
                if (Native.Unsigned(t))
                {
                    return(Enum.ToObject(t, sp.get_UShortAt(0L)));
                }
                else
                {
                    return(Enum.ToObject(t, sp.get_ShortAt(0L)));
                }

                break;
            }

            case 4:
            {
                if (Native.Unsigned(t))
                {
                    return(Enum.ToObject(t, sp.get_UIntegerAt(0L)));
                }
                else
                {
                    return(Enum.ToObject(t, sp.get_IntegerAt(0L)));
                }

                break;
            }

            case 8:
            {
                if (Native.Unsigned(t))
                {
                    return(Enum.ToObject(t, sp.get_ULongAt(0L)));
                }
                else
                {
                    return(Enum.ToObject(t, sp.get_LongAt(0L)));
                }

                break;
            }
            }

            return(null);
        }
Exemplo n.º 18
0
        public static byte[] EnumToBytes(object val)
        {
            SafePtr sp = null;
            var     t  = val.GetType();
            int     x  = Blob.BlobTypeSize(Blob.TypeToBlobType(t.GetEnumUnderlyingType()));

            switch (x)
            {
            case 1:
            {
                if (Native.Unsigned(t))
                {
                    sp = Conversions.ToByte(val);
                }
                else
                {
                    sp = Conversions.ToSByte(val);
                }

                break;
            }

            case 2:
            {
                if (Native.Unsigned(t))
                {
                    sp = Conversions.ToUShort(val);
                }
                else
                {
                    sp = Conversions.ToShort(val);
                }

                break;
            }

            case 4:
            {
                if (Native.Unsigned(t))
                {
                    sp = Conversions.ToUInteger(val);
                }
                else
                {
                    sp = Conversions.ToInteger(val);
                }

                break;
            }

            case 8:
            {
                if (Native.Unsigned(t))
                {
                    sp = Conversions.ToULong(val);
                }
                else
                {
                    sp = Conversions.ToLong(val);
                }

                break;
            }
            }

            return(sp);
        }
Exemplo n.º 19
0
 public static extern int GetIfTable(
     SafePtr pIfTable,
     ref int pdwSize,
     bool bOrder
     );
Exemplo n.º 20
0
 /// <summary>
 /// Creates a new StringBlob and initialize the data with the contents of a Blob object.
 /// </summary>
 /// <param name="blob"></param>
 public StringBlob(Blob blob)
 {
     _mem = new SafePtr(blob.Length);
     _mem.CopyFrom(blob.DangerousGetHandle(), (IntPtr)blob.Length);
 }
Exemplo n.º 21
0
 public static void ShowProperties(byte[] idl, IntPtr hwnd = default(IntPtr)) {
     using(SafePtr sptr = new SafePtr("properties"))
     using(IDLWrapper wrapper = new IDLWrapper(idl)) {
         if(wrapper.Available) {
             SHELLEXECUTEINFO structure = new SHELLEXECUTEINFO {
                 hwnd = hwnd,
                 fMask = 0x40C,
                 lpVerb = sptr,
                 lpIDList = wrapper.PIDL
             };
             structure.cbSize = Marshal.SizeOf(structure);
             PInvoke.ShellExecuteEx(ref structure);
         }
     }
 }
Exemplo n.º 22
0
 public static bool PasteFile(string pathTarget, IntPtr hwnd) {
     try {
         List<string> paths = ClipboardGetFileDropList(hwnd);
         if(paths.Count == 0) {
             return false;
         }
         string s = MakeFILEOPPATHS(paths);
         if(s.Length > 1) {
             bool flag;
             if(pathTarget.Length != 3) {
                 pathTarget = pathTarget.TrimEnd(new char[] { '\\' });
             }
             pathTarget = GetTargetIfFolderLink(new DirectoryInfo(pathTarget), out flag).FullName;
             if(flag) {
                 bool prefferdDropEffect = GetPrefferdDropEffect(hwnd);
                 short num = 0x40;
                 if(IsTargetPathContained(paths, pathTarget)) {
                     num = (short)(num | 8);
                 }
                 using(SafePtr pFrom = new SafePtr(s))
                 using(SafePtr pTo = new SafePtr(pathTarget + '\0')) {
                     SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT {
                         hwnd = hwnd,
                         wFunc = prefferdDropEffect ? 1 : 2,
                         pFrom = pFrom,
                         pTo = pTo,
                         fFlags = num
                     };
                     try {
                         if(PInvoke.SHFileOperation(ref lpFileOp) == 0) {
                             return !lpFileOp.fAnyOperationsAborted;
                         }
                     }
                     catch(Exception exception) {
                         QTUtility2.MakeErrorLog(exception);
                     }                            
                 }
             }
         }
     }
     catch(Exception exception2) {
         QTUtility2.MakeErrorLog(exception2, null);
     }
     return false;
 }
Exemplo n.º 23
0
Arquivo: Fparent.cs Projeto: Dasem/psu
 public void SetPointer(SafePtr another)
 {
     Pointer.IntPtr = another.Pointer.IntPtr;
 }