Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Мастер извлечений


Автор: lorents 24.4.2009, 16:24
как можно вызвать функцию в windows "Мастер извлечений" который извлекает файлы из zip-архивов?

Автор: Palladin 24.4.2009, 20:26
не совсем понял вопрос, но может ты ищеш shellexecute?

Автор: lorents 24.4.2009, 20:42
Palladin, сейчас объясню открой zip-архив через проводник, а затем в меню файл\извлечь

Автор: Akella 24.4.2009, 22:44
Уже была такая тема:
http://forum.vingrad.ru/forum/topic-222975/anchor-entry/0.html#entry

Вот ещё информация
http://www.sql.ru/forum/actualthread.aspx?tid=231547

А в DRKB заглядывал?

Автор: lorents 25.4.2009, 09:52
Akella, 
Цитата(Akella @  24.4.2009,  22:44 Найти цитируемый пост)
А в DRKB заглядывал?

неа smile , ща глянем

Автор: Rrader 25.4.2009, 16:54
Попробуй
Код

uses ShlObj, ActiveX;

...
{ Проверка на расширение не требуется }
function ShowExtractFilesDialog(const ZipFile: String): Boolean;
var
  Malloc: IMalloc;
  Desktop: IShellFolder;
  Archive: IShellFolder2;
  ID: PItemIDList;
  CM: IContextMenu;
  ICI: TCMInvokeCommandInfo;
begin
  Result := Succeeded(CoGetMalloc(1, Malloc));
  if Result then
  try
    Result := Succeeded(SHGetDesktopFolder(Desktop));
    if Result then
    try
      Result := Succeeded(Desktop.ParseDisplayName(0, nil,
        StringToOleStr(ZipFile), PULONG(nil)^, ID, PULONG(nil)^));
      if Result then
      try
        Result := Succeeded(Desktop.BindToObject(ID, nil,
          IID_IShellFolder2, Archive));
        if Result then
        try
          Result := Succeeded(Archive.CreateViewObject(0, IID_IContextMenu, CM));
          if Result then
          try
            { Небольшое допущение }
            FillChar(ICI, SizeOf(ICI), #0);
            with ICI do
            begin
              cbSize := SizeOf(ICI);
              nShow := SW_SHOWNORMAL;
            end;
            Result := Succeeded(CM.InvokeCommand(ICI));
          finally
            CM := nil;
          end;
        finally
          Archive := nil;
        end;
      finally
        Malloc.Free(ID);
      end;
    finally
      Desktop := nil;
    end;
  finally
    Malloc := nil;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    ShowExtractFilesDialog(OpenDialog1.FileName);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CoInitialize(nil);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CoUninitialize();
end;

Автор: lorents 25.4.2009, 20:03
Rrader, благодарю, ща попробуем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)