Windows Handle Terror

Moinmoin,

als hauptsächlicher C++-Linuxcoder will ich mich im Moment doch nochmal an Windows probieren. Folgender Code bereitet mir Kopfschmerzen:

Code:
#include <Windows.h>
#include <iostream>
#include <atlbase.h>
using namespace std;

int main(int argc, char* argv[])
{
    POINT punkt;
    GetCursorPos(&punkt); 
    
    Sleep(1000);
    HWND handle = WindowFromPoint(punkt);
    
    TCHAR szWindowText[100]; // darin wird der Titel gespeichert
    GetWindowText(hKonsole, szWindowText, 100); // Titel mit hwnd holen     cout <<  szWindowText << endl;

Als Ausgabe kommt 0012FC74. Ich hätte aber viel lieber "Mozilla Firefox" oder irgendwie sowas. Wodran liegts?

Viele Grüße
 
Ich habe deinen Code mal ausprobiert und er funktioniert unter Windows XP einwandfrei.

Bis auf das nicht deklarierte hKonsole in deinem Code.

Als Ausgabe bekomme ich den Fenster Title als Text.
 
Rückgabewerte sind nicht dazu da, einfach ignoriert zu werden ;)
Meist wird bei den APIs im Fehlerfall eine 0 zurückgegeben und man kann dann GetLastError & Co nutzen.
 
So, Problem gelöst. Also der Code ist scheinbar wirklich schon richtig so. Allerding gibt die Funktion GetWindowText den Typ LPTSTR und kein Char zurück. Sprich Unicode. Das musste ich erst konvertieren und nun klappt es auch!
 
Dann hast du auch irgendwo das Symbol UNICODE definiert. Wenn du char* haben willst, musst du dann manuell GetWindowTextA (ANSI) nutzen.
 
Was für eine IDE benutzt du denn? Api Funktionen haben bei Strings immer eine W (widechar) und eine A (ASCII) Version. Ohne den postfix wird in den projekteinstellungen geschaut ob du unicode oder ASCII haben willst. Müsstest quasi nur das umstellen dann kannst du die Funktionen auch ohne A am ende wie gewünscht nutzen.

Sent from my HTC Desire using Tapatalk
 
Wie ich sagte, ist UNICODE definiert, wird GetWindowTextW per #define zu GetWindowText, wenn UNICODE nicht definiert ist, dann wird GetWindowTextA zu GetWindowText.
 
über GetWindowText() bzw. SetWindowText() bin ich letztens mal etwas gestolpert. msdn rät zu den funktionen, dass man stattdessen SendMessage(WM_GETTEXT bzw. WM_SETTEXT) verwenden soll, falls das HWND einem anderen Prozess gehört.
Ich konnte unter win7 (prozess nicht elevated) keinen Unterschied zwischen beiden varianten feststellen. Ist der doku-eintrag historisch bedingt oder gibt es da tatsächlich einen Unterschied?
 
Zurück
Oben