// DH Screenshoter 0.3
// (C) Doddy Hackman 2014
// Based in the API of : https://imageshack.com/
unit screen;
interface
uses
Windows, System.SysUtils, System.Variants,
System.Classes, Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.pngimage, Vcl.ExtCtrls,
Vcl.ComCtrls, Vcl.StdCtrls, Jpeg, ShellApi, IdMultipartFormData,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, PerlRegEx,
about;
type
TForm1 = class(TForm)
Image1: TImage;
StatusBar1: TStatusBar;
GroupBox1: TGroupBox;
CheckBox1: TCheckBox;
Edit1: TEdit;
CheckBox2: TCheckBox;
Edit2: TEdit;
Label1: TLabel;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
GroupBox2: TGroupBox;
Edit3: TEdit;
GroupBox3: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
IdHTTP1: TIdHTTP;
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Functions
procedure capturar(nombre: string);
// Function capturar() based in :
// http://forum.codecall.net/topic/60613-how-to-capture-screen-with-delphi-code/
// http://delphi.about.com/cs/adptips2001/a/bltip0501_4.htm
// http://stackoverflow.com/questions/21971605/show-mouse-cursor-in-screenshot-with-delphi
// Thanks to Zarko Gajic , Luthfi and Ken White
var
aca: HDC;
tan: TRect;
posnow: TPoint;
imagen1: TBitmap;
imagen2: TJpegImage;
curnow: THandle;
begin
aca := GetWindowDC(GetDesktopWindow);
imagen1 := TBitmap.Create;
GetWindowRect(GetDesktopWindow, tan);
imagen1.Width := tan.Right - tan.Left;
imagen1.Height := tan.Bottom - tan.Top;
BitBlt(imagen1.Canvas.Handle, 0, 0, imagen1.Width, imagen1.Height, aca, 0,
0, SRCCOPY);
GetCursorPos(posnow);
curnow := GetCursor;
DrawIconEx(imagen1.Canvas.Handle, posnow.X, posnow.Y, curnow, 32, 32, 0, 0,
DI_NORMAL);
imagen2 := TJpegImage.Create;
imagen2.Assign(imagen1);
imagen2.CompressionQuality := 60;
imagen2.SaveToFile(nombre);
imagen1.Free;
imagen2.Free;
end;
//
procedure TForm1.Button1Click(Sender: TObject);
var
fecha: TDateTime;
fechafinal: string;
nombrefecha: string;
i: integer;
datos: TIdMultiPartFormDataStream;
code: string;
regex: TPerlRegEx;
url: string;
begin
Edit3.Text := '';
regex := TPerlRegEx.Create();
fecha := now();
fechafinal := DateTimeToStr(fecha);
nombrefecha := fechafinal + '.jpg';
nombrefecha := StringReplace(nombrefecha, '/', ':',
[rfReplaceAll, rfIgnoreCase]);
nombrefecha := StringReplace(nombrefecha, ' ', '',
[rfReplaceAll, rfIgnoreCase]);
nombrefecha := StringReplace(nombrefecha, ':', '_',
[rfReplaceAll, rfIgnoreCase]);
if (CheckBox2.Checked) then
begin
for i := 1 to StrToInt(Edit2.Text) do
begin
StatusBar1.Panels[0].Text := '[+] Taking picture on : ' + IntToStr(i) +
' seconds ';
Form1.StatusBar1.Update;
Sleep(i * 1000);
end;
end;
Form1.Hide;
Sleep(1000);
if (CheckBox1.Checked) then
begin
capturar(Edit1.Text);
end
else
begin
capturar(nombrefecha);
end;
Form1.Show;
StatusBar1.Panels[0].Text := '[+] Photo taken';
Form1.StatusBar1.Update;
if (CheckBox4.Checked) then
begin
StatusBar1.Panels[0].Text := '[+] Uploading ...';
Form1.StatusBar1.Update;
datos := TIdMultiPartFormDataStream.Create;
datos.AddFormField('key', '');
// Fuck You
if (CheckBox1.Checked) then
begin
datos.AddFile('fileupload', Edit1.Text, 'application/octet-stream');
end
else
begin
datos.AddFile('fileupload', nombrefecha, 'application/octet-stream');
end;
datos.AddFormField('format', 'json');
code := IdHTTP1.Post('http://post.imageshack.us/upload_api.php', datos);
regex.regex := '"image_link":"(.*?)"';
regex.Subject := code;
if regex.Match then
begin
url := regex.Groups[1];
url := StringReplace(url, '\', '', [rfReplaceAll, rfIgnoreCase]);
Edit3.Text := url;
StatusBar1.Panels[0].Text := '[+] Done';
Form1.StatusBar1.Update;
end
else
begin
StatusBar1.Panels[0].Text := '[-] Error uploading';
Form1.StatusBar1.Update;
end;
end;
if (CheckBox3.Checked) then
begin
if (CheckBox1.Checked) then
begin
ShellExecute(Handle, 'open', Pchar(Edit1.Text), nil, nil, SW_SHOWNORMAL);
end
else
begin
ShellExecute(Handle, 'open', Pchar(nombrefecha), nil, nil, SW_SHOWNORMAL);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.SelectAll;
Edit3.CopyToClipboard;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Form1.Close();
Form2.Close();
end;
end.
// The End ?