Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Windows Handle Terror

Diskussion: Windows Handle Terror im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Moinmoin, als hauptsächlicher C++-Linuxcoder will ich mich im Moment doch nochmal an Windows probieren. Folgender Code bereitet mir Kopfschmerzen: ...

Antwort
Alt 16.01.12, 23:10   #1 (permalink)
 
Registriert seit: 18.07.05
Nimda05 Leistung: Facit NTK
Likes: 0
Standard Windows Handle Terror

Anzeige

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
Nimda05 ist offline   Mit Zitat antworten
Alt 17.01.12, 15:56   #2 (permalink)
 
Benutzerbild von blub.txt
 
Registriert seit: 12.06.05
blub.txt Leistung: Z3
Likes: 2
Standard

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.
__________________
blub.txt ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 17.01.12, 16:01   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 18.01.12, 21:23   #4 (permalink)
Themenstarter
 
Registriert seit: 18.07.05
Nimda05 Leistung: Facit NTK
Likes: 0
Standard

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!
Nimda05 ist offline   Mit Zitat antworten
Alt 19.01.12, 18:31   #5 (permalink)
Senior Member
 
Registriert seit: 13.07.08
enkore Leistung: K 6-3enkore Leistung: K 6-3enkore Leistung: K 6-3
Likes: 85
Standard

Dann hast du auch irgendwo das Symbol UNICODE definiert. Wenn du char* haben willst, musst du dann manuell GetWindowTextA (ANSI) nutzen.
__________________
"It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."
+++ BREAKING +++ Troll ertrinkt im Planschbecken +++
enkore ist offline   Mit Zitat antworten
Alt 20.01.12, 18:11   #6 (permalink)
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard

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
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Alt 20.01.12, 19:31   #7 (permalink)
Senior Member
 
Registriert seit: 13.07.08
enkore Leistung: K 6-3enkore Leistung: K 6-3enkore Leistung: K 6-3
Likes: 85
Standard

Wie ich sagte, ist UNICODE definiert, wird GetWindowTextW per #define zu GetWindowText, wenn UNICODE nicht definiert ist, dann wird GetWindowTextA zu GetWindowText.
__________________
"It is the human race! The deterioration of the spirit of man. Man undermining himself, causing a self-willed, self-imposed, self-evident self-destruction."
+++ BREAKING +++ Troll ertrinkt im Planschbecken +++
enkore ist offline   Mit Zitat antworten
Alt 20.01.12, 20:01   #8 (permalink)
 
Registriert seit: 28.07.08
ArnoNühm Leistung: Z3
Likes: 1
Standard

ü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?
ArnoNühm ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Windows Handle Terror
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Speicher Handle und Pointer joshua Code Kitchen 3 05.01.09 18:52
Anti-Terror.... da weiss man garnicht auf welcher Seite der Terror sitzt. Watchme Off topic-Zone 4 15.08.07 00:40
Bush:" War on terror cannot be won" n8m News & Ankündigungen 1 31.08.04 22:34
E-mail terror dasuebel (In)security allgemein 2 13.08.02 10:12


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61