Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Window Handle -> Properties auslesen ? (Anfängerfrage)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.07.2007, 18:56 Uhr
~Lumpeh
Gast


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?

Ich habe jetzt schon ne Funktion gefunden: WindowFromPoint. Das liefert mir dann das Window Handle, aber wie bekomm ich dann Fenstergröße, genaue Position usw?
danke für die Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.07.2007, 23:11 Uhr
0xdeadbeef
Gott
(Operator)


Mit WindowFromPoint kommst du, wenn mich grad nicht alles täuscht, nur an Fenster im eigenen Prozess heran. Es geht dabei vor allem um Controls im eigenen Fenster.

Das, was du da vorhast, wird ohne Kooperation der anderen Applikation nicht gehen. Naja, vielleicht wenn du in den Kernelspace kommst, also einen Treiber installierst. Aber prinzipiell ist sowas nicht gewollt - denk nur daran, was ein Trojaner mit sowas für einen Schabernack treiben könnte.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.07.2007, 23:34 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Hab die FUnktion zwar noch nicht benutzt aber in der MSDN steht nichts davon das sie nur Fenster aus dem eigenen Prozess liefert. Ich wüßte auch nicht warum sie das tun sollte.

Ansonsten findest du hier alle wichtigen Funktionen wie z.B. GetWindowInfo, GetWindowRect oder GetWindowText...

http://msdn2.microsoft.com/en-us/library/ms632595.aspx


@0xdeadbeef
Prinzipell kommst du erstmal an alle Informationen aus anderen Fenstern/Anwendungen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.07.2007, 00:23 Uhr
~lumpeh
Gast


Also das mit dem WindowsSize bzw Position habe ich hinbekommen so , danke

mein neues Problem besteht darin, wie ich in einem fremden fenster einen String zeichnen kann?
kann mir da jemand helfen?
Klappt das mit GDI? Ich finde dazu keinen SampleCode... muss ich da was includen?
Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.07.2007, 01:53 Uhr
~lumpeh
Gast


Also ich habe jetzt ewig rumgefummelt und dabei ist folgendes entstanden (was bei mir noch nicht funktioniert):


Code:
#include <jni.h>
#include "NewJFrame.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma comment(lib,"gdi32")

JNIEXPORT jintArray JNICALL Java_NewJFrame_go(JNIEnv *env, jobject obj)
{  

POINT pos;
HWND h;
GetCursorPos(&pos);
h = WindowFromPoint(pos);      
PAINTSTRUCT ps;
HDC hdc = BeginPaint(h, &ps);
TextOut(h,10,10,"Hello World",11);
EndPaint(h, &ps);

return arr;

}



Beim compilieren sagt er mir folgendes:

mylib.c: In function `Java_NewJFrame_go':
mylib.c:46: warning: passing arg 1 of `TextOutA' from incompatible pointer type
/cygdrive/c/Users/Alex/AppData/Local/Temp/ccdN4FKd.o:mylib.c.text+0xf6): undefined reference to `_TextOutA@20'
collect2: ld returned 1 exit status


Ich nutze Cygwin und das ist mein Kommandoaufruf:
gcc -mno-cygwin -ICJava\jdk1.6.0_01\include -ICJava\jdk1.6.0_01\include\win32 -shared mylib.c -Wl,--add-stdcall-alias -o mylib.dll

Kann es sein dass er die gdi32.lib nicht findet? Wie linke ich die denn "richtig" ?
Ich benutze als Entwicklungsumgebung Notepad...

Und stimmt der Code sonst? Ich möchte in einem fremden Fenster, dessen handle ich über ein Mausklick bekomme, einen String schreiben. Dieses Fenster kann (bzw ist) ein Fenster eines anderen Programmes, z.b. firefox oder sonstwas...
Danke vielmals für die hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.07.2007, 10:35 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Wie du die gdi32.lib beim gcc dazu linkst kann ich dir nicht sagen aber das ist definitiv der undefined reference Fehler.


Du solltest aber bedenken das dir das zeichnen des Strings nicht viel bzw nicht lange etwas bringt. Denn sobald Firefox minimiert oder überdeckt wird oder aus sonst einem Grund seine Oberfläche neu zeichnen muss ist dein String wieder weg.
Normalerweise würde der Zeichenvorgang ja im WM_PAINT Teil des Firefox passieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.07.2007, 12:09 Uhr
~lumpeh
Gast


Hmm ja das wäre wohl das nächste Problem
falls ich das andere mal zum laufen bekomme, er bringt immer den reference Fehler

liegt es vielleicht daran, dass ich Vista64 nutze und da kein GDI mehr läuft oder sowas?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.07.2007, 14:00 Uhr
~lumpeh
Gast


also das mit dem linken klappt jetzt prima, ich musste -lgdi32 hintendranhängen!
also gcc <blablabla> -lgdi32
So er compiliert und er schreibt auch "HelloWorld" in andere Fenster rein!
Soweit so gut, nur würde ich gern

1. andere Schriftarten / Farben usw verwenden
2. das "Hello World" auch wieder wegbekommen auf Wunsch. Weil immoment bleibt es einfach da stehen Selbst wenn ich das Programm beende. Ich habe leider wirklich kaum erfahrung mit c++ und Windows API (GDI) Programmierung. Ich erahne, dass ich irgendwas mit WM_PAINT (Callback Funktion? Aber welche?) schreiben muss und in meine DLL reinstecken muss. Mensch in Java ist das alles viel einfacher

Für einen normalen C++ Programmierer ist das wohl alles Hello World Niveau, aber ich finde das alles ehr verwirrend, deshalb bin ich für jede Hilfe dankbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.07.2007, 14:13 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Eine Schrift legst du mit CreateFont und SelectObject fest. Steht aber auch alles in der MSDN

Weg bekommst du das nur in dem du das übermalst oder wie bereits gesagt den Firefox dazu bringst seine Oberfläche neu zu zeichnen.

WM_Paint bringt dir nichts weil dur nur die Nachrichten deines eigenen Fensters bekommst und nicht die vom Firefox.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.07.2007, 14:44 Uhr
Th



Du könntest ja zum Übermalen eine WM_Paint Nachricht an das andere Programm (Fenster) schicken (mittels SendMessage).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: