Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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;
            }
        }