按“在Windows资源pipe理器中的某个文件夹分组”

我想要做的是为我的应用程序创build一个文件夹,并确保每次用户input此文件夹时,都将其分组,如下所示:

文件夹分组

除了磁盘将被一些文件夹/文件replace。

所以基本上我试图达到什么“分组”function:

在这里输入图像说明

我必须在我的应用程序与c / c + +代码或蝙蝠做到这一点。 我猜这需要在registry中完成,但我找不到在哪里。 任何想法?

谢谢。

Solutions Collecting From Web of "按“在Windows资源pipe理器中的某个文件夹分组”"

你必须明白,改变资源管理器视图模式与注册表是肮脏的黑客攻击。 所以使用你自己的风险。 仅在WINDOWS 7上进行测试。

procedure SetFolderGroupBy(AParentWnd: HWND; const AFolder: UnicodeString; const AColumn: TPropertyKey; AAscending: Boolean); var Desktop: IShellFolder; Attr: DWORD; Eaten: DWORD; IDList: PItemIDList; Bag: IPropertyBag; Direction: DWORD; begin OleCheck(SHGetDesktopFolder(Desktop)); try Attr := 0; OleCheck(Desktop.ParseDisplayName(AParentWnd, nil, PWideChar(AFolder), Eaten, IDList, Attr)); try OleCheck(SHGetViewStatePropertyBag(IDList, 'Shell', SHGVSPB_FOLDERNODEFAULTS, IPropertyBag, Bag)); try OleCheck(Bag.Write('SniffedFolderType', 'Generic')); finally Bag := nil; end; OleCheck(SHGetViewStatePropertyBag_(IDList, 'Shell\{5C4F28B5-F869-4E84-8E60-F11DB97C5CC7}', SHGVSPB_FOLDERNODEFAULTS, IPropertyBag, Bag)); try if AAscending then Direction := SORT_ASCENDING else Direction := DWORD(SORT_DESCENDING); OleCheck(Bag.Write('GroupByDirection', Direction)); OleCheck(Bag.Write('GroupByKey:FMTID', GUIDToString(AColumn.fmtid))); OleCheck(Bag.Write('GroupByKey:PID', AColumn.pid)); OleCheck(Bag.Write('GroupView', DWORD(-1))); finally Bag := nil; end; finally CoTaskMemFree(IDList); end; finally Desktop := nil; end; end;