private static async void Watcher_Changed(object sender, FileSystemEventArgs e) { Debug.WriteLine($"Recycle bin event: {e.ChangeType}, {e.FullPath}"); if (e.Name.StartsWith("$I")) { // Recycle bin also stores a file starting with $I for each item return; } if (connection?.IsConnected ?? false) { var response = new ValueSet() { { "FileSystem", @"Shell:RecycleBinFolder" }, { "Path", e.FullPath }, { "Type", e.ChangeType.ToString() } }; if (e.ChangeType == WatcherChangeTypes.Created) { using var folderItem = new ShellItem(e.FullPath); var shellFileItem = GetShellFileItem(folderItem); response["Item"] = JsonConvert.SerializeObject(shellFileItem); } // Send message to UWP app to refresh items await Win32API.SendMessageAsync(connection, response); } }
private static async Task ParseArgumentsAsync(Dictionary <string, object> message, string arguments) { switch (arguments) { case "Terminate": // Exit fulltrust process (UWP is closed or suspended) appServiceExit?.Set(); break; case "Elevate": // Relaunch fulltrust process as admin if (!IsAdministrator()) { try { using (Process elevatedProcess = new Process()) { elevatedProcess.StartInfo.Verb = "runas"; elevatedProcess.StartInfo.UseShellExecute = true; elevatedProcess.StartInfo.FileName = Process.GetCurrentProcess().MainModule.FileName; elevatedProcess.StartInfo.Arguments = "elevate"; elevatedProcess.Start(); } await Win32API.SendMessageAsync(connection, new ValueSet() { { "Success", 0 } }, message.Get("RequestID", (string)null)); appServiceExit?.Set(); } catch (Win32Exception) { // If user cancels UAC await Win32API.SendMessageAsync(connection, new ValueSet() { { "Success", 1 } }, message.Get("RequestID", (string)null)); } } else { await Win32API.SendMessageAsync(connection, new ValueSet() { { "Success", -1 } }, message.Get("RequestID", (string)null)); } break; default: foreach (var mh in messageHandlers) { await mh.ParseArgumentsAsync(connection, message, arguments); } break; } }
private async Task SendEvent(string deviceName, string deviceId, DeviceEvent eventType) { if (connection?.IsConnected ?? false) { await Win32API.SendMessageAsync(connection, new ValueSet() { { "DeviceID", deviceId }, { "EventType", (int)eventType } }); } }