2017-02-02 67 views
0

我需要捕獲微軟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; 

我仍然不知道,如果以後解決此問題的代碼,這將是能夠捕捉到微軟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不知道,你必須提出另一個問題。 –