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;
    
  • 相关阅读:
    明确方向,勇往直前
    每日一笔记之3:QTconnect()
    每日一笔记之2:QT之坐标系统:
    每日一笔记之1:静态成员函数
    QT对话框模式与非模式
    Objective-C-实例变量与属性的关系
    Objective-C编码规范
    CocoaPods的安装与使用
    design_model(18)observe
    design_model(17)state
  • 原文地址:https://www.cnblogs.com/sail2000/p/1760053.html
Copyright © 2011-2022 走看看