コード例 #1
0
ファイル: ScanningPanel.cs プロジェクト: flutils/flcleaner
        public static List <long> GetRecycleBinSize()
        {
            SHQUERYRBINFO query = new SHQUERYRBINFO();
            List <long>   info  = new List <long>();

            query.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));

            try
            {
                int result = SHQueryRecycleBin(null, ref query);

                if (result == 0)
                {
                    info.Add(Convert.ToInt64(query.i64NumItems));
                    info.Add(Convert.ToInt64(query.i64Size));

                    return(info);
                }
                else
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
            catch (Exception)
            {
                //MessageBox.Show(string.Format("Error accessing Recycle Bin: {0}", ex.Message), "System Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }
        }
コード例 #2
0
ファイル: GetBinData.cs プロジェクト: Rea1ag/NotifyBin
        //Сколько сейчас данных в корзине
        public void GetSize()
        {
            SHQUERYRBINFO bb_Query = new SHQUERYRBINFO();

            bb_Query.cbSize = Marshal.SizeOf(bb_Query.GetType());

            SHQueryRecycleBin(null, ref bb_Query);
            _cb_size = "CB Size  :  " + bb_Query.cbSize;
            //Вызов элемента структуры i64NumItems, который вернет номер файла в корзине.
            _num_items   = bb_Query.i64NumItems + Language.Translate("files");
            _num_itemsMB = Convert.ToInt32(bb_Query.i64NumItems);
            //Вызов элемента структуры i64Size, который вернет размер корзины.
            _file_size = bb_Query.i64Size + Language.Translate("byte");
            if (bb_Query.i64Size >= 1024)
            {
                _file_size = bb_Query.i64Size / 1024 + Language.Translate("KB");
                if (bb_Query.i64Size >= 1048576)
                {
                    _file_size   = bb_Query.i64Size / 1048576 + Language.Translate("MB");
                    _file_sizeMB = Convert.ToInt32(bb_Query.i64Size / 1048576);
                    if (bb_Query.i64Size >= 1073741824)
                    {
                        string sizeGB = (Convert.ToDouble(bb_Query.i64Size) / 1073741824).ToString();
                        _file_size = sizeGB.Substring(0, sizeGB.IndexOf(",") + 3) + Language.Translate("GB");                         // Для дробного представления ГБ (1,65)
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Queries the size and the number of items in the Recycle Bin.
        /// </summary>
        /// <param name="drivePath">The path to the Recycle Bin drive. Leave this parameter null or empty if you want to get the info for the Recycle Bins for all drives.</param>
        /// <param name="recycleBinInfo">The out Recycle Bin info</param>
        /// <returns><see langword="true"/> if the drive supports the Recycle Bin, otherwise <see langword="false"/>.</returns>
        /// <exception cref="Win32Exception">Exception thrown if a Win32 exception has occurred during thr process.</exception>
        public static bool QueryRecycleBinInfo(string drivePath, out RecycleBinInfo recycleBinInfo)
        {
            var rbInfo = new SHQUERYRBINFO
            {
                cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO))
            };

            HResult hr = SHQueryRecycleBin(drivePath, ref rbInfo);

            if (hr == HResult.Ok)
            {
                recycleBinInfo = new RecycleBinInfo(rbInfo.i64Size, rbInfo.i64NumItems);

                return(true);
            }

            else if (hr == HResult.Fail)
            {
                recycleBinInfo = default;

                return(false);
            }

            else
            {
                Marshal.ThrowExceptionForHR((int)hr);
            }

            recycleBinInfo = default;

            return(false);
        }
コード例 #4
0
        // --------------------------------------------------------------------------------------------------------------------
        //  WinFCU clean the windows recycle bins
        // --------------------------------------------------------------------------------------------------------------------
        public static void cleanRecycleBins()
        {
            // Do not show confirm message box
            const int SHERB_NOCONFIRMATION = 0x00000001;

            SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();

            sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
            int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);

            if (sqrbi.i64NumItems == 0)
            {
                total.Logger.Debug("No files found in recycle bins");
                return;
            }
            if (sqrbi.i64NumItems == 1)
            {
                total.Logger.Info(String.Format("Found 1 deleted file in the recyclebin ({0} bytes)", sqrbi.i64Size));
            }
            else
            {
                total.Logger.Info(String.Format("Found {0} deleted files in the recyclebin ({1} bytes)", sqrbi.i64NumItems, sqrbi.i64Size));
            }

            // empty Recycle Bin and add the number of bytes deleted tot the total ammount
            if (!total.APP.Dryrun)
            {
                SHEmptyRecycleBin(IntPtr.Zero, null, SHERB_NOCONFIRMATION);
                total_bytesDeleted += sqrbi.i64Size;
            }
        }
コード例 #5
0
ファイル: killer.cs プロジェクト: devlabnet/ChromeKiller
        private int GetRecycleBinCount()
        {
            SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();

            sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
            int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);

            return((int)sqrbi.i64NumItems);
        }
コード例 #6
0
        // Return the number of items in the recycle bin.

        // Note: In Windows 2000, you need to supply the root
        // directory to the call to SHQueryRecycleBin so to get
        // the total number of files in the recycle you must add
        // up the results for each disk. See:
        // http://www.pinvoke.net/default.aspx/shell32/SHQueryRecycleBin.html
        public static int NumberOfFilesInRecycleBin()
        {
            SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();

            sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
            int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi);

            return((int)sqrbi.i64NumItems);
        }
コード例 #7
0
ファイル: RecycleBin.cs プロジェクト: muhliz25/cs-codebook
        /* Methode zum Auslesen der Anzahl und der Größe der Dateien
         * im Papierkorb */
        public static RecycleBinInfo GetRecycleBinInfo(string rootPath)
        {
            // Die auszulesenden Laufwerke bestimmen
            ArrayList drives = new ArrayList();

            if (rootPath != null && rootPath != "")
            {
                drives.Add(rootPath);
            }
            else
            {
                // Alle Festplattenpartitionen ermitteln
                string[] logicalDrives = Environment.GetLogicalDrives();
                for (int i = 0; i < logicalDrives.Length; i++)
                {
                    if (GetDriveType(logicalDrives[i]) == DRIVE_FIXED)
                    {
                        drives.Add(logicalDrives[i]);
                    }
                }
            }

            // RecycleBinInfo-Instanz für das Ergebnis und SHQUERYRBINFO-Struktur
            // erzeugen
            RecycleBinInfo rbi           = new RecycleBinInfo();
            SHQUERYRBINFO  shQueryRBInfo = new SHQUERYRBINFO();

            // Größe der Struktur definieren, damit die API-Funktion diese beim
            // Schreiben kennt
            shQueryRBInfo.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));

            // Alle ermittelten Laufwerke durchgehen
            for (int i = 0; i < drives.Count; i++)
            {
                // SHQueryRecycleBin aufrufen und eventuelle Fehler auswerten
                int result = SHQueryRecycleBin(drives[i] + "\x0",
                                               ref shQueryRBInfo);
                if (result == 0)
                {
                    // Kein Fehler: Die gelesene Daten mit dem Ergebnis addieren
                    rbi.Size  += shQueryRBInfo.i64Size;
                    rbi.Count += shQueryRBInfo.i64NumItems;
                }
                else
                {
                    // Fehler beim Lesen: Ausnahme erzeugen
                    throw new Exception(String.Format(
                                            "Fehler 0x{0:X} beim Lesen des Papierkorbs", result));
                }
            }

            return(rbi);
        }
コード例 #8
0
ファイル: DataSources.cs プロジェクト: Winterstark/SysMana
        public DataSources(List<Meter> meters)
        {
            prevFileCheck = new Dictionary<string, DateTime>();
            prevFileValue = new Dictionary<string, int>();

            monitor = new NetworkMonitor();
            adapters = monitor.Adapters;

            MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
            if (GlobalMemoryStatusEx(memStatus))
                TotalRAM = (int)((float)memStatus.ullTotalPhys / 1024 / 1024);

            bool startedMonitoring = false;

            foreach (Meter meter in meters)
                switch (meter.Data)
                {
                    case "CPU usage":
                        if (cpuCounter == null)
                        {
                            cpuCounter = new PerformanceCounter();
                            cpuCounter.CategoryName = "Processor";
                            cpuCounter.CounterName = "% Processor Time";
                            cpuCounter.InstanceName = "_Total";
                        }
                        break;
                    case "Available memory":
                    case "Used memory":
                        if (ramCounter == null)
                            ramCounter = new PerformanceCounter("Memory", "Available MBytes");
                        break;
                    case "Recycle bin file count":
                    case "Recycle bin size":
                        binQuery = new SHQUERYRBINFO();
                        break;
                    case "Download speed":
                    case "Upload speed":
                        if (!startedMonitoring)
                        {
                            monitor.StartMonitoring();
                            startedMonitoring = true;
                        }
                        break;
                    case "System volume":
                    case "Audio peak level":
                        if (audioDevice == null)
                        {
                            MMDeviceEnumerator DevEnum = new MMDeviceEnumerator();
                            audioDevice = DevEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
                        }
                        break;
                }
        }
コード例 #9
0
        private void ScanRecycleBin()
        {
            var sqrbi = new SHQUERYRBINFO {
                cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO))
            };

            SHQueryRecycleBin(string.Empty, ref sqrbi);
            if (sqrbi.i64NumItems > 0)
            {
                Wizard.StoreCleanDelegate(CleanRecycleBin, "Empty Recycle Bin", sqrbi.i64Size);
            }
        }
コード例 #10
0
            /// <summary>
            /// 查询指定目录或磁盘下被删除到回收站的文件的总大小和个数。
            /// 如果设置为null,效果跟 QuerySizeRecycleBin(out long RBsize,out long RBNumItems )一样
            /// </summary>
            /// <param name="rootpath">指定的磁盘和目录</param>
            /// <param name="RBsize">总大小,按字节计算</param>
            /// <param name="RBNumItems">文件的个数</param>
            /// <returns>如果函数成功返回0,错误为其他OLE定义的错误值</returns>
            public uint QuerySizeRecycleBin(string rootpath, out long RBsize, out long RBNumItems)
            {
                RBsize     = -1;
                RBNumItems = -1;
                SHQUERYRBINFO rbinfo = new SHQUERYRBINFO();

                rbinfo.cbsize = Marshal.SizeOf(rbinfo);

                uint rv = LibWarp.SHQueryRecycleBinW(rootpath, ref rbinfo);

                RBsize     = rbinfo.i64Size;
                RBNumItems = rbinfo.i64NumItems;
                return(rv);
            }
コード例 #11
0
            /// <summary>
            /// 查询整个回收站的大小和被删除的文件的个数
            /// </summary>
            /// <param name="RBsize">大小,按字节计算</param>
            /// <param name="RBNumItems">个数</param>
            /// <returns>如果函数成功返回0,错误为其他OLE定义的错误值</returns>
            public uint QuerySizeRecycleBin(out long RBsize, out long RBNumItems)
            {
                //整个 ,字节,两个出参都为-1表示异常
                RBsize     = -1;
                RBNumItems = -1;
                SHQUERYRBINFO rbinfo = new SHQUERYRBINFO();

                rbinfo.cbsize = Marshal.SizeOf(rbinfo);

                uint rv = LibWarp.SHQueryRecycleBinW(null, ref rbinfo);

                RBsize     = rbinfo.i64Size;
                RBNumItems = rbinfo.i64NumItems;

                return(rv);
            }
コード例 #12
0
ファイル: RecycleBin.cs プロジェクト: nullkuhl/fsu-dev
        /// <summary>
        /// method for getting total files in the recycle bin and it's overall size
        /// </summary>
        /// <returns></returns>
        public static void GetRecycleBinSize(out ulong count, out ulong size)
        {
            count = size = 0;
            SHQUERYRBINFO query = new SHQUERYRBINFO { cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO)) };
            try
            {
                var result = SHQueryRecycleBin(null, ref query);

                if (result == 0)
                {
                    count = query.i64NumItems;
                    size = query.i64Size;
                }
            }
            catch
            {
            }
        }
コード例 #13
0
ファイル: Form1.cs プロジェクト: Shy07/Desktop
        private void emptyRecycleBinToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SHQUERYRBINFO sqrbi = new SHQUERYRBINFO();

            sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO));
            if (SHQueryRecycleBin(null, ref sqrbi) == 0)
            {
                if (sqrbi.i64NumItems <= 0)
                {
                    MessageBox.Show("The operation failed. Recycle bin is empty.");
                    return;
                }
            }
            int rt = SHEmptyRecycleBin(IntPtr.Zero, null, SHERB_NOPROGRESSUI);

            if (rt != 0)
            {
                MessageBox.Show("The operation failed. Error code: " + rt.ToString() + ".");
            }
        }
コード例 #14
0
ファイル: Shell.cs プロジェクト: litdev1/LitDev
 private static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
コード例 #15
0
ファイル: Program.cs プロジェクト: rjnb50/files-uwp
        private static async Task parseRecycleBinAction(AppServiceRequestReceivedEventArgs args, string action)
        {
            switch (action)
            {
            case "Empty":
                // Shell function to empty recyclebin
                SHEmptyRecycleBin(IntPtr.Zero, null, SHERB.SHERB_NOCONFIRMATION | SHERB.SHERB_NOPROGRESSUI);
                break;

            case "Query":
                var           responseQuery = new ValueSet();
                SHQUERYRBINFO queryBinInfo  = new SHQUERYRBINFO();
                queryBinInfo.cbSize = (uint)Marshal.SizeOf(queryBinInfo);
                var res = SHQueryRecycleBin(null, ref queryBinInfo);
                if (res == Vanara.PInvoke.HRESULT.S_OK)
                {
                    var numItems = queryBinInfo.i64NumItems;
                    var binSize  = queryBinInfo.i64Size;
                    responseQuery.Add("NumItems", numItems);
                    responseQuery.Add("BinSize", binSize);
                    responseQuery.Add("FileOwner", (string)recycler.Properties[Vanara.PInvoke.Ole32.PROPERTYKEY.System.FileOwner]);
                    if (watchers.Any())
                    {
                        var info = new DirectoryInfo(watchers.First().Path);
                        responseQuery.Add("DateAccessed", info.LastAccessTime.ToBinary());
                        responseQuery.Add("DateCreated", info.CreationTime.ToBinary());
                    }
                    await args.Request.SendResponseAsync(responseQuery);
                }
                break;

            case "Enumerate":
                // Enumerate recyclebin contents and send response to UWP
                var responseEnum       = new ValueSet();
                var folderContentsList = new List <ShellFileItem>();
                foreach (var folderItem in recycler)
                {
                    try
                    {
                        string recyclePath = folderItem.FileSystemPath;         // True path on disk
                        string fileName    = Path.GetFileName(folderItem.Name); // Original file name
                        string filePath    = folderItem.Name;                   // Original file path + name
                        bool   isFolder    = folderItem.IsFolder && Path.GetExtension(folderItem.Name) != ".zip";
                        if (folderItem.Properties == null)
                        {
                            folderContentsList.Add(new ShellFileItem(isFolder, recyclePath, fileName, filePath, DateTime.Now, null, 0, null));
                            continue;
                        }
                        folderItem.Properties.TryGetValue <System.Runtime.InteropServices.ComTypes.FILETIME?>(
                            Vanara.PInvoke.Ole32.PROPERTYKEY.System.DateCreated, out var fileTime);
                        var    recycleDate = fileTime?.ToDateTime().ToLocalTime() ?? DateTime.Now;  // This is LocalTime
                        string fileSize    = folderItem.Properties.TryGetValue <ulong?>(
                            Vanara.PInvoke.Ole32.PROPERTYKEY.System.Size, out var fileSizeBytes) ?
                                             folderItem.Properties.GetPropertyString(Vanara.PInvoke.Ole32.PROPERTYKEY.System.Size) : null;
                        folderItem.Properties.TryGetValue <string>(
                            Vanara.PInvoke.Ole32.PROPERTYKEY.System.ItemTypeText, out var fileType);
                        folderContentsList.Add(new ShellFileItem(isFolder, recyclePath, fileName, filePath, recycleDate, fileSize, fileSizeBytes ?? 0, fileType));
                    }
                    catch (FileNotFoundException)
                    {
                        // Happens if files are being deleted
                    }
                    finally
                    {
                        folderItem.Dispose();
                    }
                }
                responseEnum.Add("Enumerate", JsonConvert.SerializeObject(folderContentsList));
                await args.Request.SendResponseAsync(responseEnum);

                break;

            default:
                break;
            }
        }
コード例 #16
0
 public static extern Vanara.PInvoke.HRESULT SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
コード例 #17
0
 public static extern uint SHQueryRecycleBinW(
     [In()]
     [MarshalAs(UnmanagedType.LPWStr, SizeConst = 260)]
     string RootPath
     , ref SHQUERYRBINFO queyRBInfo);
コード例 #18
0
            /// <summary>
            /// 查询指定目录或磁盘下被删除到回收站的文件的总大小和个数。
            /// 如果设置为null,效果跟 QuerySizeRecycleBin(out long RBsize,out long RBNumItems )一样
            /// </summary>
            /// <param name="rootpath">指定的磁盘和目录</param>
            /// <param name="RBsize">总大小,按字节计算</param>
            /// <param name="RBNumItems">文件的个数</param>
            /// <returns>如果函数成功返回0,错误为其他OLE定义的错误值</returns>
            public uint QuerySizeRecycleBin(string rootpath, out long RBsize, out long RBNumItems)
            {
                RBsize = -1;
                RBNumItems = -1;
                SHQUERYRBINFO rbinfo = new SHQUERYRBINFO();
                rbinfo.cbsize = Marshal.SizeOf(rbinfo);

                uint rv = LibWarp.SHQueryRecycleBinW(rootpath, ref rbinfo);
                RBsize = rbinfo.i64Size;
                RBNumItems = rbinfo.i64NumItems;
                return rv;
            }
コード例 #19
0
            /// <summary>
            /// 查询整个回收站的大小和被删除的文件的个数
            /// </summary>
            /// <param name="RBsize">大小,按字节计算</param>
            /// <param name="RBNumItems">个数</param>
            /// <returns>如果函数成功返回0,错误为其他OLE定义的错误值</returns>
            public uint QuerySizeRecycleBin(out long RBsize, out long RBNumItems)
            {
                //整个 ,字节,两个出参都为-1表示异常
                RBsize = -1;
                RBNumItems = -1;
                SHQUERYRBINFO rbinfo = new SHQUERYRBINFO();
                rbinfo.cbsize = Marshal.SizeOf(rbinfo);

                uint rv = LibWarp.SHQueryRecycleBinW(null, ref rbinfo);
                RBsize = rbinfo.i64Size;
                RBNumItems = rbinfo.i64NumItems;

                return rv;
            }
コード例 #20
0
 public static extern uint SHQueryRecycleBinW(
     [In()]
     [MarshalAs(UnmanagedType.LPWStr, SizeConst = 260)]
     string RootPath
     , ref SHQUERYRBINFO queyRBInfo);
コード例 #21
0
ファイル: RecycleBin.cs プロジェクト: muhliz25/cs-codebook
 static extern int SHQueryRecycleBin(string rootPath,
                                     ref SHQUERYRBINFO shQueryRBInfo);
コード例 #22
0
ファイル: GetBinData.cs プロジェクト: Rea1ag/NotifyBin
 public static extern int SHQueryRecycleBin([MarshalAs(UnmanagedType.LPTStr)] String pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
コード例 #23
0
ファイル: Win32API.cs プロジェクト: hez2010/files-uwp
 public static extern int SHQueryRecycleBin(string pszRootPath,
                                            ref SHQUERYRBINFO pSHQueryRBInfo);
コード例 #24
0
ファイル: Shell32.cs プロジェクト: Gainedge/BetterExplorer
		public static extern int SHQueryRecycleBin(String pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);