Пример #1
0
        private static async Task parseRecycleBinAction(AppServiceRequestReceivedEventArgs args, string action)
        {
            switch (action)
            {
            case "Empty":
                // Shell function to empty recyclebin
                Shell32.SHEmptyRecycleBin(IntPtr.Zero, null, Shell32.SHERB.SHERB_NOCONFIRMATION | Shell32.SHERB.SHERB_NOPROGRESSUI);
                break;

            case "Query":
                var responseQuery = new ValueSet();
                Shell32.SHQUERYRBINFO queryBinInfo = new Shell32.SHQUERYRBINFO();
                queryBinInfo.cbSize = (uint)Marshal.SizeOf(queryBinInfo);
                var res = Shell32.SHQueryRecycleBin("", ref queryBinInfo);
                if (res == HRESULT.S_OK)
                {
                    var numItems = queryBinInfo.i64NumItems;
                    var binSize  = queryBinInfo.i64Size;
                    responseQuery.Add("NumItems", numItems);
                    responseQuery.Add("BinSize", binSize);
                    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
                    {
                        var shellFileItem = GetRecycleBinItem(folderItem);
                        folderContentsList.Add(shellFileItem);
                    }
                    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;
            }
        }
Пример #2
0
        private static async Task parseRecycleBinAction(AppServiceRequestReceivedEventArgs args, string action)
        {
            switch (action)
            {
            case "Empty":
                // Shell function to empty recyclebin
                Shell32.SHEmptyRecycleBin(IntPtr.Zero, null, Shell32.SHERB.SHERB_NOCONFIRMATION | Shell32.SHERB.SHERB_NOPROGRESSUI);
                break;

            case "Query":
                var responseQuery = new ValueSet();
                Shell32.SHQUERYRBINFO queryBinInfo = new Shell32.SHQUERYRBINFO();
                queryBinInfo.cbSize = (uint)Marshal.SizeOf(queryBinInfo);
                var res = Shell32.SHQueryRecycleBin(null, ref queryBinInfo);
                if (res == HRESULT.S_OK)
                {
                    var numItems = queryBinInfo.i64NumItems;
                    var binSize  = queryBinInfo.i64Size;
                    responseQuery.Add("NumItems", numItems);
                    responseQuery.Add("BinSize", binSize);
                    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?>(
                            Ole32.PROPERTYKEY.System.DateCreated, out var fileTime);
                        var    recycleDate = fileTime?.ToDateTime().ToLocalTime() ?? DateTime.Now;  // This is LocalTime
                        string fileSize    = folderItem.Properties.TryGetValue <ulong?>(
                            Ole32.PROPERTYKEY.System.Size, out var fileSizeBytes) ?
                                             folderItem.Properties.GetPropertyString(Ole32.PROPERTYKEY.System.Size) : null;
                        folderItem.Properties.TryGetValue <string>(
                            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;
            }
        }