“Group by” a certain folder in windows explorer

若如初见. 提交于 2019-12-08 12:18:49

问题


What I am trying to do is to crate a folder for my application, and to make sure each time a user enters this folder, it's grouped, like this:

except that the disks would be replaced by some folders/files.

so basically I'm trying to achieve exactly what "Group by" function does:

and I have to do this in my application with c/c++ code or a bat. I'm guessing this needs to be done in the registry, but I cannot find where. any idea?

thanks.


回答1:


You must understand that changing of Explorer view mode with registry is dirty hack. So USE ON YOUR OWN RISK. TESTED ON WINDOWS 7 ONLY.

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;


来源:https://stackoverflow.com/questions/29573501/group-by-a-certain-folder-in-windows-explorer

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!