GetWindowText in Windows Forms

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
gerry80
Beiträge: 3
Registriert: Fr Okt 29, 2010 7:01 pm

GetWindowText in Windows Forms

Beitrag von gerry80 » Fr Okt 29, 2010 7:07 pm

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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: GetWindowText in Windows Forms

Beitrag von cloidnerux » Fr Okt 29, 2010 7:34 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GetWindowText in Windows Forms

Beitrag von Xin » Fr Okt 29, 2010 10:17 pm

Ich kann Deine Frage soweit auch nicht verstehen.

Ein LPSTR ist ein "LongPointer" auf einen "STRing". Ein normaler C-String.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gerry80
Beiträge: 3
Registriert: Fr Okt 29, 2010 7:01 pm

Re: GetWindowText in Windows Forms

Beitrag von gerry80 » Sa Okt 30, 2010 10:52 am

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GetWindowText in Windows Forms

Beitrag von Xin » Sa Okt 30, 2010 11:46 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gerry80
Beiträge: 3
Registriert: Fr Okt 29, 2010 7:01 pm

Re: GetWindowText in Windows Forms

Beitrag von gerry80 » Sa Okt 30, 2010 12:02 pm

Danke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: GetWindowText in Windows Forms

Beitrag von Xin » Sa Okt 30, 2010 12:15 pm

gerry80 hat geschrieben:Danke
Und was heißt Danke? ^^

Wie geht's bei Dir weiter?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten