如何捕获具有正确尺寸的 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));
我正在测试 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));