什么是" hwnd"我需要传递给GetWindowRect?我怎么得到一个?

时间:2017-10-08 23:35:02

标签: c++ windows winapi

在Windows中使用CodeBlocks,我制作了一个游戏脚本,用于读取屏幕像素并根据像素颜色确定值,效果很好。但是当我移动我的游戏画面时,它改变了我从中获取值的像素的坐标。我想我可以使用GetWindowRect来测量游戏窗口的角落,并从那里获得我需要查看的像素的位置。如果有更好的方法,我会很感激指导。 这是我尝试编译的例子。我得到一个错误," hwnd"没有宣布。但我想" hwnd"是该功能的一部分。我在这里找到了功能描述 https://msdn.microsoft.com/en-us/library/windows/desktop/ms633519(v=vs.85).aspx

#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;
}

2 个答案:

答案 0 :(得分:0)

定义RECT rect后;

然后尝试类似的事情:

HWND hwnd = GetDesktopWindow();

这只是演示使用桌面窗口。实际上,您将使用从其他地方收到的HWND。

答案 1 :(得分:0)

在功能&#34; GetWindowRect(hwnd,&amp; rect)&#34; &#34; HWND&#34;是存储窗口句柄的变量的名称,并且未定义。申报&#34; hwnd&#34;使用 &#34; HWND(变量名);&#34;没有括号。为了能够获得窗口的句柄,您需要使用另一个函数,例如:FindWindow(NULL,TEXT(&#34; WindowName&#34;)); wich将句柄返回到具有该名称的窗口,如果没有找到窗口则返回NULL。拥有一个窗口的有效句柄&#34; rect&#34;这是一个结构,将具有该窗口位置的值。那些价值观将是&#34; rect.top&#34;这是最重要的&#34; y&#34;坐标,&#34; rect.bottom&#34;这是&#34; y&#34;底部坐标,&#34; rect.left&#34;是&#34; x&#34;左坐标,&#34; rect.right&#34;是&#34; x&#34;正确的坐标 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;
 }