如何捕获具有正确尺寸的 window?

How capture a window with correct dimensions?

我正在测试 this code example (that use PrintWindow api) 通过句柄捕获特定的 window,发现捕获的 window 大于原始值(当使用全桌面)。是否有可能捕获与原始尺寸相同的 window?

提前致谢。


版次:

例如假设我想在 Internet Explorer 上捕获网站的正文:

var
  Title: array [0 .. 255] of Char;
begin
  GetWindowText(GetForegroundWindow, Title, 255);
  if Title <> '' then
  begin
    if ContainsStr(string(Title), '- Internet Explorer') then
    begin
      WindowHandle := FindWindow(nil, PChar(string(Title)));
      WindowHandle := FindWindowEx(WindowHandle, 0, 'Frame Tab', nil);
      WindowHandle := FindWindowEx(WindowHandle, 0, 'TabWindowClass', nil);
      WindowHandle := FindWindowEx(WindowHandle, 0, 'Shell DocObject View',
      nil);
      WindowHandle := FindWindowEx(WindowHandle, 0, 'Internet Explorer_Server', nil); 
    end;
  end;
end;

然后使用链接答案的代码,IE 的第一个句柄将在屏幕截图上具有正确的大小,最后一个 (Internet Explorer_Server) 将被捕获大。我正在寻找一种方法来抵消屏幕截图的大小而不是拉伸。


第 2 版:

我的目标是 align remote mouse clicks on handle. Is true that i already have a solution like you can see in my last comment,但如果我看到的只是网站正文的屏幕截图(如 gif 上所示和上文所述),则此解决方案无效。然后我问的是 屏幕截图的大小 因为我认为这可能是问题所在。

我发现了问题!碰巧在 1366x768 的屏幕分辨率下,句柄 Internet Explorer_Server 上的屏幕截图将是 1366x650,因此现在我必须根据此分辨率调整鼠标点击,而不是像以前所做的那样根据屏幕的原始分辨率 (1366x768)(链接问题)。

服务器:

X := Round((X * {ResolutionX}1366) / Image1.Width);
Y := Round((Y * {ResolutionY}650) / Image1.Height);

客户:

PostMessage(WindowHandle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(X, Y));
PostMessage(WindowHandle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(X, Y));