如何通过注册表项禁用资源管理器中的“网络”?

问题描述 投票:0回答:1

在调用

SaveFileDialog
WPF 中的
C#
时,我试图禁用/隐藏“网络”文件夹,并且从我在 SO/Google 上读到的所有内容来看,无法自定义/隐藏/禁用导航窗格完全没有。

但是,我偶然发现了“文件夹选项 > 显示网络”中的一个选项,它允许我隐藏导航窗格中的“网络”链接。有谁知道我需要使用哪个注册表项来切换它?我的计划是在显示对话框之前以编程方式将标志设置为

0
,并在完成后将其恢复到原始状态。

我已经挖掘了以下资源(以及更多资源),但找不到我需要的内容:

隐藏网络快捷方式的原因是因为在VPN环境下访问“网络”会导致C#应用程序崩溃。

c# wpf registry savefiledialog network-drive
1个回答
0
投票

又挖掘了几个小时后,我实际上找到了两种替代方案。

解决方案1 - 隐藏导航面板

有2种方法可以隐藏导航面板

  • 1a) 安装 NuGet
    WindowsAPICodePack
    并将
    ShowPlacesList
    设置为
    false
  • 1b) 使用
    FileDialogNative
     创建您自己的 
    HIDEPINNEDPLACES
     互操作文件和 
    SetOptions

示例 1a:

 using Microsoft.WindowsAPICodePack.Dialogs;

 var dialog = new CommonOpenFileDialog()
 {
     ShowPlacesList = false
 };

示例 1b,要求您复制此 文件,它允许您访问

IFileDialog
,并将其放入您的项目中:

var dialog = (FileDialogNative.IFileSaveDialog) new FileDialogNative.FileSaveDialogRCW();
dialog.SetOptions(FileDialogNative.FOS.FOS_HIDEPINNEDPLACES);
dialog.Show(new WindowInteropHelper(Application.Current.MainWindow).Handle);

使用上述任一实现都会隐藏整个导航面板。但是,请注意,用户仍然可以通过对话框中的地址栏导航...所以这并不是一个真正完美的解决方案,至少对我来说不是,但也许对其他人来说是这样。

解决方案2 - 处理FolderChanging事件

虽然感觉有点“hacky”,但这实际上解决了我原来的问题。您仍然需要安装 NuGet

WindowsAPICodePack
,但您不再需要从文件对话框中隐藏任何内容,只需按原样使用即可。

using Microsoft.WindowsAPICodePack.Dialogs;

var dialog = new CommonOpenFileDialog()
dialog.FolderChanging += (sender, e) =>
{
    Log.Debug("FolderChanging");
    e.Cancel = true;
};

您可以检查实际选择的路径/文件夹/项目,在下面的屏幕截图中,它显示了单击“网络”快捷方式的时间,通过将

Cancel
设置为
true
,我们可以忽略该选择。

希望这对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.