2017-10-08 24 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; 
} 
相關問題