Delphi Screenshot

0

Witam potrzebuje informacji jak napisać kod który będzie robił screnna co 3 minuty od nacisnięcia buttonu i zapisywał każdy screen w folderze (Każdy screen o innej nazwie).
Z góry dziękuję za pomoc

0
wR napisał(a)

Witam potrzebuje informacji jak napisać kod który będzie robił screnna co 3 minuty od nacisnięcia buttonu i zapisywał każdy screen w folderze (Każdy screen o innej nazwie).
Z góry dziękuję za pomoc

temat nadaje sie do dzialu Newbie.

  1. http://4programmers.net/Delphi/FAQ/Jak_zrobić_zrzut_z_ekranu
  2. Komponent ttimer o intervale 3601000
  3. w buttonie timer1.enabled:=true;
  4. zeby screeny mialy odpowiednie nazy plikow uzyj najlepiej FormatDateTime() oraz "Now" ktore zraca aktualny czas.
    google+pomoc delphi i masz to napisac sam.
0

Masz tu przetestowany działający kod:

pamiętaj aby do dodać do: uses JPEG;

///////////////////////////////////////////////////////////////////////////////////////////////////////
//Kompilator: Delphi 7
*UWAGA funkcja wymaga: uses JPEG; *A to jesli chcemy zastosowac format JPG.
//Versja 1.2 29.08.2007
//Funkcja wykonuje zrzut pulpitu do pliku w formacie *.JPG
//WEJSCIE:
//(PathAndFileName) <-- tu podajemy pelna sciezke dojscia wraz z nazwa pliku
//do jakiego ma zostac zapisana aktualna zawartosc ekranu, zapisany obraz
//jest w postaci formatu (JPG) o 80% kompresji.
//UWAGA: Jezeli jako nazwe podamy pusty ciag '' to wtedy funkcja automatycznie
//tworzy sciezke dojscia do systemowego katalogu TEMP i tam zapisuje plik
//obrazu pod losowo wygenerowana nazwa z rozszerzeniem .JPG cala sciezka dojscia
//wraz z nazwa i rozszerzeniem zwracana jest w zmiennej (PathAndFileName) w
//przypadku dokonania udanego zapisu tego pliku.
//WYJSCIE:
//funkcja zwraca TRUE jesli zapis wykonal sie prawidlowo a w zmiennej (PathAndFileName)
//mamy wtedy pelna sciezke dojscia wraz z nazwa i rozszezeniem do zapisanego pliku.
//jesli funkcja zwroci FALSE to oznacza ,ze plik obrazu nie zostal zapisany na dysku
//a zmienna (PathAndFileName) zawiera wtedy pusty ciag niezaleznie od wczesniejszej wartosci!!!

function ZrzutEkranu(var PathAndFileName: string): boolean;
type
TPathBuffer = array[0..MAX_PATH-1] of Char;
var
Buffer: TPathBuffer;
ObrazEkranu: TCanvas;
Bitmapa: TBitmap;//To dla formatu BMP !!!!
ObrazJPG: TJPEGImage;//To dla formatu JPEG !!!!
begin
ObrazEkranu:=nil;
Bitmapa:=NIL;
ObrazJPG:=NIL;
Result:=False;
try
//Jesli nie podano sciezki oraz nazwy pliku tworzymy wlasna w systemowym katalogu TEMP
if PathAndFileName = '' then
begin
//Tu ustalamy sciezke do systemowego katalogu TEMP i zapisujemy w Buffer
if not Boolean(GetTempPath(SizeOf(Buffer), Buffer)) then exit;
//Teraz do tej samej tablicy Buffer zapisujemy juz sciezke i nazwe pliku.
if GetTempFileName (Buffer,'',0,Buffer) <> 0 then
begin
PathAndFileName:=Buffer;
if FileExists(PathAndFileName) then
if not DeleteFile(PathAndFileName) then exit;
//Ustalamy nowe rozserzenie dla pliku.
PathAndFileName:=ChangeFileExt(PathAndFileName,'.jpg');
end
else
exit; //wyjscie jesli nie udalo sie utworzenie unikatowej nazwy
end;
//Jesli podana sciezka (z wylaczeniem nazwy pliku) nie istnieje to wyjscie.
if not DirectoryExists(ExtractFileDir(PathAndFileName)) then exit;
//Jesli nazwa pliku nie istnieje to wyjscie.
if ExtractFileName(PathAndFileName) = '' then exit;
try
ObrazEkranu:=TCanvas.Create;
try
ObrazEkranu.Handle:=GetWindowDC(GetDesktopWindow); //Pobieramy uchwyt HDC do Pulpitu Windows.
Bitmapa:=TBitmap.Create;
Bitmapa.Width := Screen.Width;
Bitmapa.Height := Screen.Height;
{ kopiowanie }
Bitmapa.Canvas.CopyRect (Rect(0, 0, Screen.Width, Screen.Height),ObrazEkranu,Rect (0, 0, Screen.Width, Screen.Height));
try
ObrazJPG:=TJPEGImage.Create;//Dla formatu JPG !!!
*ObrazJPG.Grayscale:=True;*A tak ustawiamy obrazek czarno-bialy!!!
ObrazJPG.Assign(Bitmapa);
//Tu dodatkowo ustawiamy wielkosc kompresji obrazka JPG
ObrazJPG.CompressionQuality:=80; //80% - najbardziej optymalna skutecznosc kompresji
ObrazJPG.Compress;
ObrazJPG.SaveToFile(PathAndFileName); //Zapisujemy obrazek w formacie JPG
Result:=True;
finally
ObrazJPG.Free;
end;
finally
Bitmapa.Free;
end;
finally
ObrazEkranu.Free;
end;
finally
if Result = False then PathAndFileName:='';
end;
end;

///////////////////////////////////////////////////////////////////////////////////////////////////////

0

a jak zrobic zeby tworzyl folder o zawartosci edit.text i tam zapisywal screnny ?

0

mam pytania all zrobiłem program tworzy folder zapisuje w nim screeny itp ale chciałbym wiedzieć jak prze konwertować ten folder na .rar lub inny format

0

http://lmgtfy.com/?q=delphi+rar
http://lmgtfy.com/?q=delphi+zip
z zipem jest latwiej.
zerknij tez na www.torry.net i poszukaj komponentow.
//a folderu sie nie konwertuje tylko kompresuje do pliku.

0

Zdaje mi się czy on knuje coś niedobrego...
Zaraz zapyta jak zainstalować indy i wysłać e-mail z załącznikiem...

Czemu nikt na to nie wpadł...?

0

wiesz knucie to wiesz? wiesz co to antycheat na bazie screenow do gier?

0

http://www.componentace.com/download/download.php?editionid=12
chciałbym wiedzieć czy to jest dobry component do tworzenia zipów :) z góry dzięki za pomoc.

0

ZipForge to na pewno jeden z najbardziej znanych komponentów tego typu.
Bardzo dobrze udokumentowany, a jeśli wolisz uczyć się na oficjalnych demach, to w paczce znajdziesz ich kilkanaście.
Musisz tylko pamiętać o tym, że jeśli chcesz udostępnić swój program innym osobom (czyli też użyć go na innych komputerach), wtedy łamiesz licencję darmowej edycji ZipForge.
Za to kiepsko widzę pomysł wysyłania mailem screenów z gry. Żaden packer nie spakuje Ci plików jpg do dużo mniejszych rozmiarów, a co jeśli ktoś miał grę włączoną przez np 10 godzin ? Dodaj do tego więcej niż jednego użytkownika gry i w rezultacie dostaniesz maile wielkości dziesiątek megabajtów dziennie (mnożone przez liczbę użytkowników). Nie wspominam nawet o obciążaniu uploadu na komputerach wysyłających takie maile. Nie łatwiej sprawdzać listę procesów i okien uruchomionych w systemie i tylko w przypadku trafienia wysyłać informację tekstową o tym fakcie do administracji ? (niekoniecznie mailem, można to zrobić np. przez sockety - byłoby to natychmiastowe, w pełni konfigurowalne powiadamianie administratora o wykryciach).

0

to chodzi o 1 mecz 30 minutowy do 10 graczy.

0

No to i tak tych screenów będzie za dużo do sprawnego uploadu znając możliwości typowych polskich łączy. A lepiej to rozwiąż tak, jak napisał
poprzednik, sprawdzając listę porcesow pod kątem niedozwolonych programów i informuj admina. Natomiast inne moduły do obsługi zipa także
z użyciem dllek i nie tylko są dostepne na www.torry.net wraz z przykładami. Nie wczytywałem się jednak w ich licencje czy są w pełni darmoe.

0

mam pytanie jak uzyc tego zipforge zeby konkretny plik zipował.

0
wR napisał(a)

mam pytanie jak uzyc tego zipforge zeby konkretny plik zipował.

To już jest straszne lenistwo, biorąc pod uwagę, że ten komponent zawiera nie tylko pokaźny manual, ale też dema, w których jest wszystko nie tylko wypisane, ale też skomentowane !

No ale, skoro sam nie potrafisz otworzyć pliku .pas dema, to wkleję Ci kawałek kodu:

with Archiver do
begin
  FileName := 'C:\TEST\test.zip';  //Set archive name
  OpenArchive(fmCreate); //Create a new archive file
  BaseDir := 'C:\SOURCE_FOLDER'; //Set path to folder with some text files to BaseDir
  AddFiles('*.*'); //Add all files and directories from 'C:\SOURCE_FOLDER' to the archive
  CloseArchive; //Close the archive
end;

W manualu/demach wszystko jest na tej zasadzie opisane, wraz z komentarzem !

EDIT: Może lepiej jeszcze dopisać, że parametrem AddFiles jest maska plików, w tym wypadku ., która oznacza wszystkie pliki. Jeśli chcesz dodać konkretne pliki modyfikujesz maskę - przykładowo *.jpg doda wszystkie pliki jpg, a 'nazwa.jpg' doda plik 'nazwa.jpg'. Dla mnie to oczywistość, ale tak sobie pomyślałem, że możesz z tym mieć kolejny problem...

1 użytkowników online, w tym zalogowanych: 0, gości: 1