Seite 1 von 1

GetWindowText in Windows Forms

Verfasst: Fr Okt 29, 2010 7:07 pm
von gerry80
hiilfee,
ich schaffe es einfach nicht den Fensternamen des aktiven fenster als string in einer windows formanwendung in c++ auszulesen. ich weiss nicht was man bei LPSTR machen muss bitte helft mir.

Re: GetWindowText in Windows Forms

Verfasst: Fr Okt 29, 2010 7:34 pm
von cloidnerux
Hi und Willkommen im Forum.
Da der allgemeine Vorrat an Kristallkugeln aus gegangen ist, präzisiere dich bitte etwas mehr ;)
http://proggen.org/doku.php?id=faq:frageformulieren

MfG cloidnerux.

Re: GetWindowText in Windows Forms

Verfasst: Fr Okt 29, 2010 10:17 pm
von Xin
Ich kann Deine Frage soweit auch nicht verstehen.

Ein LPSTR ist ein "LongPointer" auf einen "STRing". Ein normaler C-String.

Re: GetWindowText in Windows Forms

Verfasst: Sa Okt 30, 2010 10:52 am
von gerry80
sorry, ich bin gerade erst von vb auf c++ umgestiegen. also ich hab es so:

Code: Alles auswählen

char window[256];
HWND active = GetActiveWindow();
GetWindowTextA(active, window, 256);
String^ activewindow; //= window ??
MessageBox::Show(activewindow);
aber wie bekomme ich den char window in einen string?
ich hatte es schon so aber da bleit die messagebox eifach leer.

Code: Alles auswählen

char window[256];
HWND active = GetActiveWindow();
GetWindowTextA(active, window, 256);
String^ activewindow;
int i = 256;
for( int s = 1; s < i; s++)
{
  activewindow += window[s];
 }
MessageBox::Show(activewindow);
edit: ich habs gerade noch mal ausprobiert da kommt nicht nichts raus sondern nur viele zahlen.

Re: GetWindowText in Windows Forms

Verfasst: Sa Okt 30, 2010 11:46 am
von Xin
gerry80 hat geschrieben:sorry, ich bin gerade erst von vb auf c++ umgestiegen. also ich hab es so:
Du wirst folgenden Rat nicht befolgen, aber ich gebe ihn Dir dennoch:
Vergiss alles, was Du jemals in VB gelernt hast und beginne bei Null. Keine Windows-Programmierung, setz Dich auf die Konsole und lerne programmieren, dann die Zusammenhänge und wenn es dann tatsächlich noch Windows-Programmierung sein muss (und das muss unter C++ wirklich nicht sein), dann schau Dir die Historie von Windows an. Du kombinierst nämlich hier gerade ein komplexes, neuartiges Flugzeug mit Teilen einer Dampfmaschine. Es ist für Experten schon schwer, das zum Fliegen zu bringen, es explodiert dafür einfach zu gerne...
gerry80 hat geschrieben:

Code: Alles auswählen

char window[256];
HWND active = GetActiveWindow();
GetWindowTextA(active, window, 256);
String^ activewindow; //= window ??
MessageBox::Show(activewindow);
aber wie bekomme ich den char window in einen string?
ich hatte es schon so aber da bleit die messagebox eifach leer.
Herzlich Willkommen in der Hölle.

Du mischst hier WinAPI-Programmierung und das .NET-Framework. Das Vergnügen habe ich beruflich auch, allerdings programmiere ich schon etwas länger. Bitte lies Dir meinen Rat nochmals durch. Ich weiß, dass man ganz schnell tolle GUIs haben will und so weiter, aber es kann nicht schaden vorher programmieren zu lernen - zumal GUI-Programmierung zu den langweiligsten Dingen in der Informatik gehören.

String ^ ist .NET und muss mit einer Microsoft-Erweiterung gcnew angelegt werden, damit es über den Garbage-Collector läuft. Das ist kein C++! Das ist Microsoft-Voodoo. Wenn Du lernen willst, etwas zu programmieren, was auch mal auf einem Linux oder Mac-System laufen soll, dann Finger davon!
Entweder .NET oder WinAPI. Mischen darfst Du, wenn Du beides kannst und zwischen den beiden Monstern eine Brücke brauen kannst.

Du brauchst einen LPTSTR, was nix anderes ist als ein (char *). Du musst auf ein Array zeigen, dass (mindestens) so lang ist, wie Du als drittens Argument angeben hast, so wie Du es hier gemacht hast:
gerry80 hat geschrieben:

Code: Alles auswählen

char window[256];
HWND active = GetActiveWindow();
GetWindowTextA(active, window, 256);
String^ activewindow;
int i = 256;
for( int s = 1; s < i; s++)
{
  activewindow += window[s];
 }
MessageBox::Show(activewindow);
edit: ich habs gerade noch mal ausprobiert da kommt nicht nichts raus sondern nur viele zahlen.
Hehehe, bitte lerne erstmal die Werkzeuge kennen, bevor Du wild mit dem Inhalt des halben Werkzeugkasten auf den Code einschlägst und auch noch .NET und WinAPI wild vermischst.

Bitte vergiss alles, was Du in VB gelernt hast. Bitte fang bei Null an neu zu lernen. Wenn ich sehe, dass man i (wie Index) als Arraygröße nimmt und s (wie size) als Index, dann sehe ich, dass Du nicht soweit bist, Dich in den Bereich der Programmierung zu setzen, den selbst Microsoft mit .NET am liebsten vergessen machen möchte.
Ansonsten kannst Du Deinen (LPTSTR-)String auch gleich mit der MessageBox-Funktion über die WinAPI ausgeben.

Re: GetWindowText in Windows Forms

Verfasst: Sa Okt 30, 2010 12:02 pm
von gerry80
Danke

Re: GetWindowText in Windows Forms

Verfasst: Sa Okt 30, 2010 12:15 pm
von Xin
gerry80 hat geschrieben:Danke
Und was heißt Danke? ^^

Wie geht's bei Dir weiter?