# fremdes Fenster auslesen (Fenstereigenschaften)



## roxX0r (11. Juli 2007)

hio!

Ich hab normalerweise nicht viel mit C++ am Hut, sondern eher mit Java aber für folgendes Problem muss ich C++ benutzen und das dann in Java einbauen (JNI).
Ganz allg. geht es um folgendes: Ich möchte aus einem Fenster Dinge auslesen (anderes Programm). Dazu würde ich gern mein Java Fensterchen auf ein Anderes drüberziehen und er soll dann erkennen, welche Eigenschaften das darunterliegende Fenster hat (z.B. Ausmaße, Titel). Das ist nun mit Java garnicht möglich, wie gehe ich da mit C++ an das Problem ran?
Kenne mich da leider garnicht aus, wäre auch schon für Schlagwörter dankbar, damit ich besser suchen kann. Welche Funktionen ich da brauche z.B. Wie ich eine DLL erstelle weiß ich.

danke für die Hilfe


----------



## jokey2 (11. Juli 2007)

Du solltest dazuschreiben, unter welchem Betriebssystem Du arbeitest und mit welcher Entwicklungsumgebung/Compiler.

Wenn du unter Windows arbeitest, kannst Du die Funktion WindowFromPoint verwenden, die Dir ein Fensterhandle des Fensters zurückgibt, das den entsprechenden Punkt enthält (mit gewissen Einschränkungen -> MSDN). Sonst würde mir jetzt nur die EnumWindows-Funktion einfallen. Damit kannst Du alle Fenster durchlaufen und dann das richtige rausfinden.


----------



## roxX0r (11. Juli 2007)

jo es geht um Windows

und wie bekomme ich dann die Eigenschaften?
Entwicklungsumgebung: da würd ich sagen DevC++. Ich benötige ja nur eine DLL, den Rest schreibe ich mit Java. Ich möchte Java mitteilen, wo das Fenster liegt und wie groß es ist, also die Koordinaten.
Danke schonmal für die antwort


----------



## roxX0r (11. Juli 2007)

ok habe es hinbekommen, hier meine Lösung:


```
JNIEXPORT jintArray JNICALL Java_NewJFrame_go(JNIEnv *env, jobject obj) 
{   
 
POINT pos;
HWND h;
GetCursorPos(&pos);
h = WindowFromPoint(pos);
RECT r;
GetWindowRect(h, &r);
jintArray arr = (*env)->NewIntArray(env,4);
jint buf[4];
buf[0] = r.left;
buf[1] = r.top;
buf[2] = r.right;
buf[3] = r.bottom;
(*env)->SetIntArrayRegion(env, arr, 0, 4, buf);

return arr;


}
```

mein nächstes Problem wäre folgendes: Wie schreibe ich mit C++ etas auf den Bildschirm? Einfach irgendwo hin, auch in ein anderes Fenster bzw Programm. Geht sowas? Evtl mach ich besser nen neuen thread auf


----------

