private async Task ParseNetworkDriveOperationAsync(PipeStream connection, Dictionary <string, object> message) { switch (message.Get("netdriveop", "")) { case "GetNetworkLocations": var networkLocations = await Win32API.StartSTATask(() => { var locations = new List <ShellLinkItem>(); using (var nethood = new ShellFolder(Shell32.KNOWNFOLDERID.FOLDERID_NetHood)) { foreach (var item in nethood) { if (item is ShellLink link) { locations.Add(ShellFolderExtensions.GetShellLinkItem(link)); } else { var linkPath = (string)item.Properties["System.Link.TargetParsingPath"]; if (linkPath != null) { var linkItem = ShellFolderExtensions.GetShellFileItem(item); locations.Add(new ShellLinkItem(linkItem) { TargetPath = linkPath }); } } } } return(locations); }); var response = new ValueSet { { "NetworkLocations", JsonConvert.SerializeObject(networkLocations) } }; await Win32API.SendMessageAsync(connection, response, message.Get("RequestID", (string)null)); break; case "OpenMapNetworkDriveDialog": var hwnd = (long)message["HWND"]; _ = NetworkDrivesAPI.OpenMapNetworkDriveDialog(hwnd); break; case "DisconnectNetworkDrive": var drivePath = (string)message["drive"]; _ = NetworkDrivesAPI.DisconnectNetworkDrive(drivePath); break; } }
private async Task ParseNetworkDriveOperationAsync(PipeStream connection, Dictionary <string, object> message) { switch (message.Get("netdriveop", "")) { case "GetNetworkLocations": var networkLocations = await Win32API.StartSTATask(() => { var netl = new ValueSet(); using (var nethood = new ShellFolder(Shell32.KNOWNFOLDERID.FOLDERID_NetHood)) { foreach (var link in nethood) { var linkPath = (string)link.Properties["System.Link.TargetParsingPath"]; if (linkPath != null) { netl.Add(link.Name, linkPath); } } } return(netl); }); networkLocations ??= new ValueSet(); networkLocations.Add("Count", networkLocations.Count); await Win32API.SendMessageAsync(connection, networkLocations, message.Get("RequestID", (string)null)); break; case "OpenMapNetworkDriveDialog": var hwnd = (long)message["HWND"]; _ = NetworkDrivesAPI.OpenMapNetworkDriveDialog(hwnd); break; case "DisconnectNetworkDrive": var drivePath = (string)message["drive"]; _ = NetworkDrivesAPI.DisconnectNetworkDrive(drivePath); break; } }