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); } }
//Сколько сейчас данных в корзине 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) } } } }
/// <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); }
// -------------------------------------------------------------------------------------------------------------------- // 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; } }
private int GetRecycleBinCount() { SHQUERYRBINFO sqrbi = new SHQUERYRBINFO(); sqrbi.cbSize = Marshal.SizeOf(typeof(SHQUERYRBINFO)); int hresult = SHQueryRecycleBin(string.Empty, ref sqrbi); return((int)sqrbi.i64NumItems); }
// 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); }
/* 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); }
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; } }
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); } }
/// <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); }
/// <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); }
/// <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 { } }
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() + "."); } }
private static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
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; } }
public static extern Vanara.PInvoke.HRESULT SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
public static extern uint SHQueryRecycleBinW( [In()] [MarshalAs(UnmanagedType.LPWStr, SizeConst = 260)] string RootPath , ref SHQUERYRBINFO queyRBInfo);
/// <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; }
/// <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; }
static extern int SHQueryRecycleBin(string rootPath, ref SHQUERYRBINFO shQueryRBInfo);
public static extern int SHQueryRecycleBin([MarshalAs(UnmanagedType.LPTStr)] String pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
public static extern int SHQueryRecycleBin(string pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);
public static extern int SHQueryRecycleBin(String pszRootPath, ref SHQUERYRBINFO pSHQueryRBInfo);