Navigation 操作Windows 7资源管理器导航窗格

Navigation 操作Windows 7资源管理器导航窗格,navigation,windows-explorer,windows-shell,Navigation,Windows Explorer,Windows Shell,根据我在上收到的答案,很明显,我必须将以下内容添加到自定义浏览器窗口启动器中。我想启动一个根浏览器视图,对于,只需该窗口即可使导航窗格看起来像旧的Windows XP文件夹窗格。我已经开始在“开始”菜单上放置指向这些文件夹视图的快捷方式,因此将快捷方式更改为通过启动器运行非常简单 以下是“XP文件夹”窗格: 以下是Windows 7导航窗格: (来源:)在Win 7中不可能按您的要求执行操作,即自定义资源管理器窗口的外观,以从导航窗格中删除除文件夹树视图外的所有项目(库、收藏夹等),例如单个

根据我在上收到的答案,很明显,我必须将以下内容添加到自定义浏览器窗口启动器中。我想启动一个根浏览器视图,对于,只需该窗口即可使导航窗格看起来像旧的Windows XP文件夹窗格。我已经开始在“开始”菜单上放置指向这些文件夹视图的快捷方式,因此将快捷方式更改为通过启动器运行非常简单

以下是“XP文件夹”窗格:

以下是Windows 7导航窗格:

(来源:)

在Win 7中不可能按您的要求执行操作,即自定义资源管理器窗口的外观,以从导航窗格中删除除文件夹树视图外的所有项目(库、收藏夹等),例如单个资源管理器实例。正如您可能已经发现的那样,通过在4个位置修改注册表,您可以在系统范围内进行设置。或者,更简单地说,您可以在资源管理器属性窗口的导航窗格中设置“显示所有文件夹”(如果您对“收藏夹”链接仍然存在感到满意)。但是,这两个都是系统范围的设置,将影响所有资源管理器窗口


很抱歉,我知道这并不能让您了解您想要的内容,但系统范围的设置是您从导航窗格中删除这些项目的唯一选项。(顺便说一句,这里不止你一个人——有很多人更喜欢XP Explorer视图)。

好吧,我还没有时间完全完成这段代码(我不知道你想要什么,但你没有真正指定)。这样做的基本前提是将ExplorerBrowser控件托管在.NET表单中(使用需要获取并添加引用的),在创建TreeView之前等待,并对窗口进行子类化,以允许我们拦截项插入

不幸的是,没有什么是简单的,文本不能直接告诉您项目是什么(因为他们没有设置它),您需要做的是从
insertStruct.lParam
获取PIDL并将其解析为有意义的内容,可能使用
IShellFolder
接口。然后,您可以有选择地删除项目(通过返回0作为
m.Result
),并且您可以截取需要的任何其他内容。你可能认为会有一个简单的解决办法,但我猜你运气不好;)希望对你有点帮助

另一种方法可能是执行类似的操作(直接使用主机资源管理器),但使用类似的方法来钩住注册表函数,并有选择地更改资源管理器控件获得的视图,从而允许一些注册表调整工作

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用Microsoft.WindowsAPICodePack.Shell;
使用System.Runtime.InteropServices;
命名空间MyExplorer
{
公共部分类Form1:Form
{
常量int WH_CALLWNDPROC=4;
const int WM_CREATE=1;
公共委托int-HookProc(int-nCode、IntPtr-wParam、IntPtr-lParam);
[DllImport(“user32.dll”,CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
公共静态外部IntPtr setWindowshookx(intidhook,HookProc lpfn,
IntPtr hInstance,int threadId);
[DllImport(“user32.dll”,CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
公共静态外部bool unhookwindowshookx(IntPtr hHook);
[DllImport(“user32.dll”,CharSet=CharSet.Auto,
CallingConvention=CallingConvention.StdCall)]
公共静态外部内部调用nexthookex(IntPtr hHook,intncode,
IntPtr wParam、IntPtr lParam);
[DllImport(“user32.dll”,SetLastError=true,CharSet=CharSet.Auto)]
静态外部int GetClassName(IntPtr hWnd、StringBuilder lpClassName、int nMaxCount);
IntPtr m_hHook;
HookProc-HookDelegate;
结构WindowHookStruct
{            
公共IntPtr LPRAM;
公共IntPtr wParam;
公共信息;
公共IntPtr hwnd;
}
公共类子类TreeView:NativeWindow
{           
const int TV_FIRST=0x1100;
//const int TVM_INSERTITEMA=(TV_FIRST+0);
const int TVM_INSERTITEMW=(TV_FIRST+50);
结构TVINSERTSTRUCTW
{
公共IntPtr hParent;
公共IntPtr hInsertAfter;
/*TVITEMW*/
公众口罩;
公共IntPtr hItem;
公营单位国家;
公共uint状态掩码;
公共IntPtr pszText;
公共int cchTextMax;
公共国际形象;
公共int选择图像;
公共儿童;
公共IntPtr LPRAM;
}
整数计数=0;
受保护的覆盖无效WndProc(参考消息m)
{                
bool-bHandled=false;
开关(m.Msg)
{
案例TVM_插入项目:
TVINSERTSTRUCTW insertStruct=(TVINSERTSTRUCTW)Marshal.PtrToStructure(m.LParam,typeof(TVINSERTSTRUCTW));
/*更改文本以证明某一点*/
string name=string.Format(“{0:X}{1}你好”,insertStruct.hParent.ToInt64(),count++);
insertStruct.pszText=Marshal.StringToBSTR(名称);
insertStruct.cchTextMax=name.Length+1;
StructureToPtr(insertStruct,m.LParam,false);
/*insertStruct.lParam是指向IDL的指针,
使用IShellFolder::GetDisplayNameOf拉出