2017-02-02 3 views
0

Мне нужен захват Microsoft Edge окно и попробовал с PrintWindow, но unfortunately it doesn't work. Затем, теперь я хочу попробовать использовать Canvas.CopyRect api.Как захватить только окно браузера Microsoft Edge?

Я попытался с следующим кодом, но вызывают ошибку в нарушения прав доступа на линии показан на скриншоте ниже:

procedure ScreenShotWindow; 
var 
    c: TCanvas; 
    r, t: TRect; 
    h: THandle; 
    Bild: TBitMap; 
begin 
    c := TCanvas.Create; 
    h := FindWindow(nil, 'Microsoft Edge'); 
    c.Handle := GetWindowDC(h); 
    GetWindowRect(h, t); 
    try 
    r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top); 
    Bild.Width := t.Right - t.Left; { <-- Access Violation Here } 
    Bild.Height := t.Bottom - t.Top; 
    Bild.Canvas.CopyRect(r, c, t); 
    Bild.SaveToFile('test'+ RandomPassword(10)+'.bmp'); 
    finally 
    ReleaseDC(0, c.Handle); 
    c.Free; 
    end; 
end; 

Я до сих пор не знаю, если после того, как исправить этот код, это будет в состоянии захватить Microsoft Edg, так что если кто-то знает какой-то способ, который работает, также скажите мне пожалуйста: D.

+0

В следующий раз, пожалуйста, укажите строку нарушения прав доступа или другую ошибку с комментарием (// нарушение доступа к этой строке) в коде вместо изображения вашего кода. –

+0

Действительно, изображения занимают место, которое кто-то платит за :-) Так что, если это не совсем необходимо, люди должны воздерживаться от загрузки изображений. –

ответ

1

Вы еще не создали Bild в своем коде. Это нужно создать сначала, прежде чем вы сможете его использовать (и уничтожить, как только вы закончите с ним).

procedure ScreenShotWindow; 
var 
    c: TCanvas; 
    r, t: TRect; 
    h: THandle; 
    Bild: TBitMap; 
begin 
    c := TCanvas.Create; 
    h := FindWindow(nil, 'Microsoft Edge'); 
    c.Handle := GetWindowDC(h); 
    GetWindowRect(h, t); 
    try 
    r := Rect(0, 0, t.Right - t.Left, t.Bottom - t.Top); 
    Bild := TBitMap.Create; 
    try 
     Bild.Width := t.Right - t.Left; 
     Bild.Height := t.Bottom - t.Top; 
     Bild.Canvas.CopyRect(r, c, t); 
     Bild.SaveToFile('test'+ RandomPassword(10)+'.bmp'); 
    finally 
     Bild.Free; 
    end; 
    finally 
    ReleaseDC(0, c.Handle); 
    c.Free; 
    end; 
end; 
+0

спасибо. Теперь, почему я получаю только часть окна? [Например: notepad.exe] (http://image.prntscr.com/image/b7fffb4f0fa54fd1a3f20418d2f6b9cf.png) –

+0

@Franciscocamilo Не уверен, вам придется задать еще один вопрос об этом. –

Смежные вопросы