2 olinaliu olinaliu 于 2015.06.15 23:07 提问

delphi 里面 IShellItem是如何使用的。

图片说明
提示未定义IShellItem ,不知道是那个头文件未引用,
系统是Win7,
delphi7和delphixe2都试过,头文件引用了ShellAPI, ComObj还是不行;

3个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.06.16 08:18
已采纳

应该是ShlObj;

给你段代码参考

uses ActiveX, ComObj, ShlObj;

function TForm1.CopyItem(const aSrcItem, aDest, aNewName: string): HRESULT;
const
CLSID_FileOp: TGUID = '{3ad05575-8857-4850-9277-11b85bdb8e09}';
var
lFileOperation: IFileOperation;
psiFrom: IShellItem;
psiTo: IShellItem;
begin
//
// Initialize COM as STA.
//
Result := CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE);
if Succeeded(Result) then
begin

//
// Create the IFileOperation interface
//
Result := CoCreateInstance(CLSID_FileOp, nil, CLSCTX_ALL, IFileOperation,
                      lFileOperation);
if Succeeded(Result) then
begin
  //
  // Set the operation flags. Turn off all UI from being shown to the
  // user during the operation. This includes error, confirmation,
  // and progress dialogs.
  //
  Result := lFileOperation.SetOperationFlags(FOF_NO_UI);
  if Succeeded(Result) then
  begin
    //
    // Create an IShellItem from the supplied source path.
    //
    Result := SHCreateItemFromParsingName(aSrcItem,
                                     nil,
                                     IShellItem, psiFrom);
    if Succeeded(Result) then
    begin
      if aDest <> '' then
      begin
        //
        // Create an IShellItem from the supplied
        // destination path.
        //
        Result := SHCreateItemFromParsingName(aDest,
                                         nil,
                                         IShellItem, psiTo);
      end;

      if Succeeded(Result) then
      begin
        //
        // Add the operation
        //
        Result := lFileOperation.CopyItem(psiFrom, psiTo, aNewName, nil);

        psiTo := nil;
      end;

      psiFrom := nil;
    end;

    if Succeeded(Result) then
    begin
      //
      // Perform the operation to copy the file.
      //
      Result := lFileOperation.PerformOperations;
    end;
  end;

  //
  // Release the IFileOperation interface.
  //
  lFileOperation := nil;
end;

CoUninitialize;

end;
end;

caozhy
caozhy   Ds   Rxr 2015.06.15 23:31

C++是Shobjidl.h,Windows XP SP1以上
delphi的sdk可能比较旧。xe2不知道。

olinaliu
olinaliu   2015.06.16 15:52

不好意思,这段代码,我看到过,这个ShlObj里面也没有IShellItem的定义;

Csdn user default icon
上传中...
上传图片
插入图片