2017-10-08 2 views
-4

Mit CodeBlocks in Windows, habe ich ein Skript für ein Spiel, das Bildschirm Pixel liest und bestimmt einen Wert abhängig von Pixelfarben, funktioniert gut. Aber wenn ich meinen Spielbildschirm bewege, ändern sich die Koordinaten der Pixel, von denen ich die Werte bekomme. Ich denke, ich kann GetWindowRect verwenden, um die Ecke des Spielfensters zu messen und von dort die Position der Pixel zu erhalten, die ich sehen muss. Wenn es eine bessere Möglichkeit gibt, dies zu tun, würde ich die Führung zu schätzen wissen. Dies ist das Beispiel, das ich versuche zu kompilieren. Ich bekomme einen Fehler, dass "HWND" nicht deklariert ist. Aber ich dachte "HWND" war Teil der Funktion. Ich fand die Funktionsbeschreibung hier
https://msdn.microsoft.com/en-us/library/windows/desktop/ms633519(v=vs.85).aspxWas ist der "hwnd", den ich an GetWindowRect weitergeben muss? Wie bekomme ich einen?

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

Antwort

0

Nach der Definition von RECT rect;

Dann versuchen Sie so etwas wie:

HWND hwnd = GetDesktopWindow(); 

Das ist nur das Desktop-Fenster veranschaulicht werden. In Wirklichkeit werden Sie einen HWND verwenden, den Sie von woanders erhalten.

0

In der Funktion "GetWindowRect (hwnd, & rect)" "hwnd" ist der Name einer Variablen, die das Handle in einem Fenster speichert, und es ist nicht definiert. Um "hwnd" zu deklarieren, verwenden Sie "HWND (Variablenname);" ohne Klammern. Um das Handle eines Fensters zu erhalten, müssen Sie eine andere Funktion verwenden, zum Beispiel: FindWindow (NULL, TEXT ("WindowName")); Das gibt das Handle an ein Fenster mit diesem Namen zurück oder gibt NULL zurück, wenn kein Fenster gefunden wird. Nachdem Sie ein gültiges Handle für ein Fenster "rect" haben, das ein Struct ist, werden die Werte der Position dieses Fensters angezeigt. Diese Werte werden "rect.top" sein, welches die obere "y" Koordinate ist, "rect.bottom" was "y" untere Koordinate ist, "rect.left" was "x" linke Koordinate ist, "rect.right" was ist "x" richtige Koordinate
Screen Coordinates Image

Hinweis !: im Beispiel Rechner muss geöffnet und nicht minimiert sein!

Beispiel:

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