2017-10-08 23 views
-4

在Windows中使用CodeBlocks,我为游戏制作了一个脚本,它可以读取屏幕像素并根据像素颜色确定一个值,效果很好。但是当我移动我的游戏屏幕时,它会更改我从中获取值的像素坐标。我想我可以使用GetWindowRect来衡量游戏窗口的角落,并从那里获取我需要查看的像素的位置。如果有更好的方法来做到这一点,我将不胜感激指导。 这是我试图编译的例子。我得到一个错误,“hwnd”没有声明。但我认为“hwnd”是函数的一部分。我发现功能的描述在这里
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633519(v=vs.85).aspx什么是我需要传递给GetWindowRect的“hwnd”?我如何获得一个?

#include <windows.h> 

int main(){ 
    RECT rect; 
    if(GetWindowRect(hwnd, &rect)) 
    { 
     int width = rect.right - rect.left; 
     int height = rect.bottom - rect.top; 
    } 
    std::cout<<width<<"\n"<<height; 
} 

回答

0

您RECT RECT的定义之后;

然后尝试类似:

HWND hwnd = GetDesktopWindow(); 

这只是演示了如何使用桌面窗口。实际上,您将使用您从别处收到的HWND。

0

在函数“GetWindowRect(hwnd,& rect)”中,“hwnd”是存储窗口句柄的变量的名称,它没有定义。声明“hwnd”使用 “HWND(变量名称);”没有括号。为了能够获得窗口的句柄,你需要使用另一个函数,例如:FindWindow(NULL,TEXT(“WindowName”));将该句柄返回到具有该名称的窗口,或者如果未找到窗口,则返回NULL。在窗口“rect”有效句柄之后,这是一个Struct,它将具有该窗口位置的值。这些值将是“rect.top”,即顶部“y”坐标,“rect.bottom”是“y”底部坐标,“rect.left”是“x”左侧坐标,“rect.right” “x”右边的坐标。
Screen Coordinates Image

注意!在示例中,计算器必须打开并且不能最小化!

实施例:

#include <windows.h> 
#include <iostream> 
int main(){ 
HWND handleToCalculatorWindow; // Handle to window declared here! 
RECT window; 
handleToCalculatorWindow = FindWindow(NULL,TEXT("Calculator")); 
GetWindowRect(handleToCalculatorWindow , &window); //Coordinates to window! 
std::cout<<"Calculator window top coordinate:" 
<<window.top<<"\nCalculator window right coordinate:"<<window.right; 
} 
相关问题