Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Как разархивировать RAR архив с паралем?   Найти похожие ветки 

 
NikNet ©   (2005-05-20 00:42) [0]

Могу без пароля но с паролем не могу Помогите кому не лень
что бы не было легче выкладывую все исходники ПЛИЗ ПОМОГИТЕ?

unit Lenin_Unrar;

{$A-,H-}
{$ALIGN OFF}
{$MINENUMSIZE 4}

interface

uses
Windows;

const
ERAR_END_ARCHIVE    = 10;
ERAR_NO_MEMORY      = 11;
ERAR_BAD_DATA       = 12;
ERAR_BAD_ARCHIVE    = 13;
ERAR_UNKNOWN_FORMAT = 14;
ERAR_EOPEN          = 15;
ERAR_ECREATE        = 16;
ERAR_ECLOSE         = 17;
ERAR_EREAD          = 18;
ERAR_EWRITE         = 19;
ERAR_SMALL_BUF      = 20;

RAR_OM_LIST         =  0;
RAR_OM_EXTRACT      =  1;

RAR_SKIP            =  0;
RAR_TEST            =  1;
RAR_EXTRACT         =  2;

RAR_VOL_ASK         =  0;
RAR_VOL_NOTIFY      =  1;

type
RARHeaderData = record
 ArcName  :array [0..259] of char;
 FileName :array [0..259] of char;
 Flags, PackSize, UnpSize, HostOS, FileCRC,
 FileTime, UnpVer, Method, FileAttr: UINT;
 CmtBuf: PChar;
 CmtBufSize, CmtSize, CmtState: UINT;
end;

RAROpenArchiveData = record
 ArcName   :PChar;
 OpenMode  :UINT;
 OpenResult:UINT ;
 CmtBuf    :PChar;
 CmtBufSize:UINT;
 CmtSize   :UINT;
 CmtState  :UINT;
end;

TChangeVolProc = function(ArcName: PChar; Mode: integer): integer cdecl export;
TProcessDataProc = function(Addr: PUCHAR; Size: integer): integer cdecl export;

function RAROpenArchive(var ArchiveDate: RAROpenArchiveData): THandle; stdcall; external "unrar.dll";
function RARCloseArchive(hArcData: THandle): integer; stdcall; external "unrar.dll";
function RARReadHeader(hArcData: THandle; var HeaderData: RARHeaderData): integer; stdcall; external "unrar.dll";
function RARProcessFile(hArcData: THandle; Operation: integer; DestPath, DestName: PChar): integer; stdcall; external "unrar.dll";
procedure RARSetChangeVolProc(hArcData: THandle; ChangeVolProc: TChangeVolProc); stdcall; external "unrar.dll";
procedure RARSetProcessDataProc(hArcData: THandle; ProcessDataProc: TProcessDataProc); stdcall; external "unrar.dll";
procedure RARSetPassword(hArcData: THandle; Password: PChar); stdcall; external "unrar.dll";

implementation

end.

program sample;

uses
Windows, Messages,
Lenin_UnRAR in "Lenin_UnRAR.pas",
Lenin_SysUtils in "..\..\Lenin_SysUtils.pas",
Lenin_Controls in "..\..\Lenin_Controls.pas";

{$R dialog.res} //Подключаем ресурс диалогового окна

procedure UnRAR_EctractFiles(hListBox: HWND; ArcName, Path: Pchar);
var
Err: string;
OperBegin, OperEnd: TTimeStamp;
hArcData: THandle;
RHCode: Integer;
CmtBuf: array [0..16384] of char;
HeaderData: RARHeaderData;
OpenArchiveData: RAROpenArchiveData;
begin
OpenArchiveData.ArcName := ArcName;
OpenArchiveData.CmtBuf := CmtBuf;
OpenArchiveData.CmtBufSize := SizeOf(CmtBuf);
OpenArchiveData.OpenMode := RAR_OM_EXTRACT;

hArcData := RAROpenArchive(OpenArchiveData);
OperBegin := DateTimeToTimeStamp(Now);
RHCode := 0;
 while RHCode = 0 do begin
  RARProcessFile(hArcData, RAR_EXTRACT, Path, nil);
  RHCode := RARReadHeader(hArcData, HeaderData);
   if Pos("\", HeaderData.FileName) > 0 then begin
    ListBox_AddItem(hListBox, "Extract: " + HeaderData.FileName);
    ListBox_SelectedItem(hListBox, ListBox_GetItemCount(hListBox) - 1);
   end;
  OperEnd := DateTimeToTimeStamp(Now);
  ProcessMessages;
 end;
  Str(RHCode, Err);
   if RhCode <> 10 then
    MessageBox(GetActiveWindow, PChar("Ошибка Извлечения!" + #13 + "Код: "
     + Err + #13 + "Файл: " + ArcName), "Ошибка...", MB_OK);
RARCloseArchive(hArcData);
end;

//Функция, обрабатывающая все команды от элементов управления окна
function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;
begin
Result := False;
 case uMsg of
  WM_INITDIALOG:
   begin
   end;
  WM_COMMAND:
    case LoWord(wp) of
     //При нажатии на кнопку с идентификатором 4 распаковываем архив
     4:
      begin
       if FileExists(GetCurDir + "sample.rar") then begin
        ListBox_ClearItems(GetDlgItem(hWin, 30));
        UnRAR_EctractFiles(GetDlgItem(hWin, 30), //Хендл ListBox
         PChar(GetCurDir + "sample.rar"), //Имя архива
         PChar(GetCurDir)); //Куда распаковываем архив? GetCurDir - Текущий каталог.
       end;
      end;
     1: EndDialog(hWin, 0); //Заркываем программу
    end;
  //При нажатии на кнопку "Х" в шапке программы закрываем приложение
  WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
end;
end;

begin
//Открываем диалоговое окно MAIN_WINDOW (достаем окно из ресурсов)
DialogBox(hInstance, "MAIN_WINDOW", 0, @DlgProc);

end.


 
VMcL ©   (2005-05-20 11:19) [1]

Искать по фразе "Brute Force"


 
VMcL ©   (2005-05-20 11:20) [2]

P.S. Уже есть готовое решение: cRARk. Но если пароль длинный и никаких подробностей о нём не известно, но можно годы подбирать...


 
NikNet ©   (2005-05-20 17:01) [3]

Да зачем мне подбирать Я ФАЙЛОВЫЙ МЕНЕДЖЕР ДЕЛАЮ :~|

Помогите разорхивировать с  паролем ...


 
alpet ©   (2005-05-20 17:10) [4]

Проблем нет - документация по модулю рулит. Причем здесь WinAPI или  должна быть какая то функция (NtSetUnrarPassword :) ) что позволит этой библиотеке распаковывать с паролем ?


 
Marser ©   (2005-05-20 18:49) [5]

См. ShellExecute и хелп по WinRAR, там работа с командной строкой остаточно подробно описана.


 
NikNet ©   (2005-05-21 12:24) [6]

Тоже мне наговорили всякие левые ф-ций ну все равно спосибо...

Я уже нашол.


 
KilkennyCat ©   (2005-05-21 13:40) [7]


> что бы не было легче выкладывую все исходники



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
3-1117771022
paul_k
2005-06-03 07:57
2005.07.18
Как в RAVE сгруппировать записи


4-1116440529
Jetus
2005-05-18 22:22
2005.07.18
Как получить всю возможную инфу о сервисе в ХР?


14-1119715087
GEEK
2005-06-25 19:58
2005.07.18
Версии


3-1118067103
Jake
2005-06-06 18:11
2005.07.18
Ошибка нет провайдера


11-1103046887
Clipper Chip
2004-12-14 20:54
2005.07.18
Глюки Pixels[x,y] в PBitMap.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский