zoukankan      html  css  js  c++  java
  • 像操作系统一样新建文件夹

    uses comobj, shlobj;
    
    function GetShellFolderFromPath(owner: IShellFolder;
      path: string): IShellFolder;
    var
      P: PWideChar;
      folder: IShellFolder;
      NewPIDL: PItemIDList;
      NumChars, Flags, HR: LongWord;
    
    begin
      P := StringToOleStr(path);
      NumChars := Length(path);
      OleCheck(owner.ParseDisplayName(0, nil, P, NumChars, NewPIDL, Flags));
      OleCheck(owner.BindToObject(NewPIDL, nil, IShellFolder, folder));
    
      Result := folder;
    end;
    
    procedure ExecuteContextMenuCommand(cm: IContextMenu; cmd: string);
    var
      menu: HMENU;
      ci: TCMInvokeCommandInfo;
      // rt:TRect;
    begin
      menu := CreatePopupMenu;
      OleCheck(cm.QueryContextMenu(menu, 0, 0, 99999, CMF_NORMAL));
      // TrackPopupMenu   (menu,TPM_RETURNCMD   or   TPM_LEFTALIGN,200,200,   0,Handle,@rt);
      DestroyMenu(menu);
    
      FillChar(ci, sizeof(ci), #0);
      ci.cbSize := sizeof(ci);
      ci.lpVerb := pchar(cmd);
      OleCheck(cm.InvokeCommand(ci));
    
    end;
    
    //调用例子
    procedure TForm1.Button1Click(Sender: TObject);
    var
      folder: IShellFolder;
      view: IShellView;
      cm: IContextMenu;
      desk: IShellFolder;
    
    begin
      //
      OleCheck(SHGetDesktopFolder(desk));
      folder := GetShellFolderFromPath(desk, 'D:\tmp2 ');
      OleCheck(folder.CreateViewObject(Handle, IShellView, view));
      OleCheck(view.GetItemObject(SVGIO_BACKGROUND, IContextMenu, pointer(cm)));
      ExecuteContextMenuCommand(cm, 'NewFolder ');
    
    end;
    
  • 相关阅读:
    codevs 1163:访问艺术馆
    codevs 2853:方格游戏
    冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱
    HDU 1317:XYZZY
    codevs 1380:没有上司的舞会
    POJ 1734:Sightseeing trip
    lesson 23 one man's meat is another man's poison
    wordlist 4
    TPO-12 C1 Revise a Hemingway paper
    lesson 22 by heart
  • 原文地址:https://www.cnblogs.com/sail2000/p/1760053.html
Copyright © 2011-2022 走看看