Ynt: Desktop ekran goruntusunun fotografini cekmek

Başlatan z, 28 Aralık 2013, 05:12:05

z

Asagidaki kod parcasi ile desktop goruntusunun pes pese fotolari cekiliyor ve diske kaydediliyor.
Gerci hdd'ye yazim esnasinda fotolarin cekilme hizi degisebiliyor. Bunlari movie makera attiginizda gene de video olusturabiliyorsunuz.

Ancak sorunum şu;

desktop fotosu cekilirken (ayni durum print screen tusuna basilinca da oluyor) mouse cursor goruntuye dahil edilmiyor.

Mouse cursorun de fotosunun cekilmesini nasil saglarim?


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
  FullWindow = True;
var
  Win: HWND;
  DC: HDC;
  Bmp: TBitmap;
  FileName: string;
  WinRect: TRect;
  Width: Integer;
  Height: Integer;
  i:integer;
begin
  if not directoryexists('Foto') then createdir('Foto');
  Form1.Hide;
  try
    Application.ProcessMessages; // Was Sleep(500);
    Win := GetDesktopWindow;

    if FullWindow then
    begin
      GetWindowRect(Win, WinRect);
      DC := GetWindowDC(Win);
    end else
    begin
      Windows.GetClientRect(Win, WinRect);
      DC := GetDC(Win);
    end;
    try

      Width := WinRect.Right - WinRect.Left;
      Height := WinRect.Bottom - WinRect.Top;
      Bmp := TBitmap.Create;

      for i:=0 to 99 do
         begin
            Bmp.Height := Height;
            Bmp.Width := Width;
            BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
            FileName := inttostr(i);
            Bmp.SaveToFile(Format('Foto\'+'%s.bmp', [FileName]));
         end;
      Bmp.Free;
      
    finally
      ReleaseDC(Win, DC);
    end;
  finally
    Form1.Show;
  end;
end;
end.


mesaj birleştirme:: 28 Aralık 2013, 05:22:20

Bir diger sorunum da;

Ekran goruntusunun pes pese fotolarini cekip video yapmaktansa sadece mouse tiklandiginda ekran fotosunu nasil cekerim?

Burada sorun, tiklanan ekran, delphi forum ekrani değil desktopta acilmis herhangi bir programin ekrani. Tiklandiginda tik bu programa ait olacak ama benim delphi programim bu tiki yakalasin ve foto ceksin istiyorum.


Bunu yaparsam sadece tik sayisi kadar fotograf cekilecek (foto sayisi cok azalacak) bunu movie makera ekleyip kareler arasina yazilar da  ekleyerek video yapmak istiyorum.

http://stackoverflow.com/questions/661250/how-to-take-a-screenshot-of-the-active-window-in-delphi
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Kabil ATICI

Hareketsiz görüntülerden film yapmak için (özellikle sunum tarzı) için kullanılabilecek program Adobe Director. (eski üreticisi Macromedia idi.)
Örneğin ekran resmini alıp üzerinde kendi oluşturduğun imleci kullanarak istediğin gibi hareket ettirebiliyor, istersen ses ekleyebiliyorsun...

Scrip desteğinde olan program sçrip kullanmadan da hareketli görüntü üretimi mevcut.
ambar7

Burak B

#2
1- Fare imleçini de dahil etmek için linkteki kodu Delphi' ye çevirin. Win32 API zaten.
    Screen Capture With Mouse Cursor

2- Herhangi bir pencerenin tıklandığında bundan haberdar olup bir eylem gerçekleştirmek için o pencerenin tutamacını(handle) bulmalısınız. Bunun için birkaç farklı yöntem var. Bunlardan en basiti FindWindow Win32 fonksiyonudur. Ayrıca direkt fare imlecinin altındaki pencerenin handle değerini veren WindowFromPoint() gibi fonksiyonlarda var. Pencere tutamacı elde edildikten sonra uygulamaya ait mesaj döngüsüne kanca atılarak uygulamaya istediğinizi yaptırabilirsiniz.
   
    Sizin durumunuzda kanca atmaya bile gerek kalmaz. İstediğiniz pencerenin FindWindow ile tutamaç değerini bulun. Sonra bunu WindowFromPoint() ile karşılaştırın eşitseler capture yapın.

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

muhittin_kaplan


z

#4
Hocam bahsettiginiz programlardan bir kacini denedim. Hepsi de kurulum asamasinda makinenin internete baglanmasini istiyor.

Benim calistigim makine internete baglanmiyor. Baglamiyorum. Onlar baglanmiyor ama benim elim kolum baglandi.

Delphi kodlar ise yarayacak gibi. Kursor sorununu da hellettim. Geriye mouse tiklandiginda fotograf cekme isi kaldi.



mesaj birleştirme:: 28 Aralık 2013, 15:00:58

Bir tane mouse var. Derdim bu mousun desktop ekranini base alindiginda tiklandigi anki desktop uzerindeki cursor x,y posizyonunu elde etmek.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

Hocam yalnız tıklama anından çekme ise mouse'a br kanca (hook) atarsınız. Ama screen capture tarzı bir program için GDI veya GDI+ kullanmak en kötü seçenek. Olsa olsa C veya D planı olur...

z

Su anda baska planim kalmadi. Makinem internete girmeyecek sekilde bir instalasyon yapabilirsem tamam, ama yok galiba.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

#7
hocam snag i bulayım upload edeyim çekin siz, flashla felan kursanız

mesaj birleştirme:: 28 Aralık 2013, 15:53:27

kurulumsuz var(ver 9), kurulumlu var(ver 11). hangisi ?

mesaj birleştirme:: 28 Aralık 2013, 16:04:33

http://www.4shared.com/rar/3jKauUKL/Techsmith_SnagIt_v1110_Build_2.html

z

#8
@Muhittinkaplan, super olur hocam.

Sagdan soldan buldugum kodlarla mousa kanca atmayi basardim fakat bana sadece mouse hareket ettikce koordinat bilgileri geliyor. Tiklama anina iliskin bilgilere nasil ulasirim bilmiyorum.

unit MouseHooks;

interface

uses
Classes, Controls, Forms, StdCtrls, SysUtils, Windows;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function myHookProc(code : Integer; wParam, 
lParam : LongInt) : LongInt; 
stdcall;

var
Form1: TForm1;
myHook : hHook;

function myHookProc(code : Integer; wParam, 
lParam : LongInt) : LongInt;
var
X, Y : Integer;

begin
X := PMouseHookStruct(lParam).pt.X;
Y := PMouseHookStruct(lParam).pt.Y;
Form1.Label1.Caption := IntToStr(X) + 
' : ' + IntToStr(Y);

// It is HIGHLY important that this next 
// call be made if you want normal 
// processing to occur. If you don't make 
// this call, than the message is gone 
// forever.

// To enable the system to process the 
// message, the return value must be 0. To 
// discard the message, the return value 
// must be a non-zero value.

result := CallNextHookEx(myHook, Code, 
wParam, lParam);
end;

procedure TForm1.Button1Click(Sender: 
TObject);
begin
myHook := SetWindowsHookEx(WH_MOUSE, 
myHookProc, hInstance, 
GetCurrentThreadID);
end;

procedure TForm1.Button2Click(Sender: 
TObject);
begin
UnhookWindowsHookEx(myHook);
end;

end.



mesaj birleştirme:: 28 Aralık 2013, 16:17:04

Muhittinkaplan asagidaki linkten ben dosyaya falan ulasamadim.

20 sn bekleyeceksin diyor ama saniye 20 de cakili duruyor hic geri saymiyor.  Benim gibi yukleme ozurluler icin nasil yukleyecegimi yazarmisin?

http://www.4shared.com/rar/3jKauUKL/Techsmith_SnagIt_v1110_Build_2.html
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan


muhittin_kaplan

#10
4shared face google+ gibi uyelik ile indirmeye izin veriyor. Garip. Dosya
Tc ye yukluyorum bitsin linklerim

mesaj birleştirme:: 28 Aralık 2013, 16:44:30

http://www.dosya.tc/server21/xioMRK/TechsmithSnagItv11.1.0Build248.rar.html

mesaj birleştirme:: 28 Aralık 2013, 16:45:53

hocam en altta bir /a var orası download linki (bende öyle görünüyor :D )

engerex

@z Aşağıdaki adreste ilk kodu denedim. Gayet başarılı. Mouse Left/Right Button Down/Up, position, whell, hepsi ayrı ayrı görülebiliyor. (Yalnız whell de biraz sorun var gibi. Karıştırmış.)

http://stackoverflow.com/questions/13345655/how-can-a-control-receive-mouse-events-after-the-mouse-is-dragged-beyond-its-bor

z

@Engerex hemen deneyecegim.

@Muhittinkaplan

Tesekkurler kurdum ve calistirdim.

Bazi sorularim olacak.

MP4 harcinde formatta dosya olusturabilirmiyim?
Goruntu kalitesi kotu oldu. Programda tikladigim butonda ne yaziyor hic anlasilmiyor.
Bu programla olusturdugun guzel bir videonun linki varmi?


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

#13
evet hocam sadece mp4 varmış. youtube yaptım 360p verdi.

benim SPA nın oyunları caps yaptığı bir program daha var ona bakayım.



mesaj birleştirme:: 28 Aralık 2013, 22:14:43

bunalmış

engerex