Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Wert aus WM_CHAR und WPARAM

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 < [ 2 ]
000
18.06.2006, 20:35 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Hi,

ich hab schon geuscht, aber nicht wirklich was gefunden ...
Ich hab ein kleines Tool, das den Wert der aktuell gedrückten Taste benötigt.
Es wird WM_CHAR gesendet und ich kann ja mit switch/case wParam prüfen. Allerdings habe ich keine Lust, das ganze Alphabet durchzugehen ?!
Wie kann ich das sonst machen ? Ich hab gelesen
C++:
(TCHAR)wParam
sollte gehen. Allerdings brauch die Funktion ein LPCSTR und ich bekomme somit eine Fehlermeldung laut: Can not convert from 'TCHAR' to 'LPCSTR'. Wenn ich auf LPCSTR caste, wird zwar kompiliert, das Programm verreckt dann aber, sobald ich eine Taste drücke ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.06.2006, 21:00 Uhr
Spacelord
Hoffnungsloser Fall


Wie sieht denn dein Code genau aus? nen LPCSTR ist ja nen Zeiger auf ne nullterminierte Zeichenkette und kein einzelnes Zeichen.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.06.2006, 21:01 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
z.B.:

C++:
case WM_CHAR:
    ::MessageBox(hWnd,(LPCTSTR)&wParam,"",NULL);
    return 0;


müsste aber funzen.

Bearbeitung:
oder aber, wie Spacelord schreibt, auf einen char einlesen

--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 18.06.2006 um 21:06 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.06.2006, 21:40 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


So sieht er derzeit aus:

C++:
LRESULT CALLBACK WndProc(
                         HWND hwnd,
                         UINT message,
                         WPARAM wParam,
                         LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;

    switch(message)
    {
    case WM_CREATE:
        return 0;

    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);

        GetClientRect(hwnd, &rect);

        DrawText(hdc, TEXT("Hey fun-soft.de :-P"), -1, &rect,
            DT_SINGLELINE | DT_CENTER | DT_VCENTER);

        EndPaint(hwnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_CHAR:        
        hdc = GetDC(hwnd);
        GetClientRect(hwnd, &rect);
        TextOut(hdc, 1, 1, (LPCSTR)&wParam, 1);
        ReleaseDC(hwnd,hdc);
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}


Und so geht es auch. Aber wieso muss ich eine Referenz casten und mit einem normalen Objekt geht es nicht ?!
Dank dir, Uwe !
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.06.2006, 21:44 Uhr
Spacelord
Hoffnungsloser Fall


Das & liefert dir in diesem Zusammenhang die Adresse von wParam und diese wird dann auf LPCSTR gecastet.
Wie gesagt,nen LPCSTR ist nen Zeiger. Wenn du nen TCHAR, z.B. mit dem Inhalt 63 ,nach LPCSTR castest muss das einfach in die Hose gehen weil der dann versucht an der Speicheradresse 63 rumzuwurschteln.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.06.2006, 21:47 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von Spacelord:
[...]weil der dann versucht an der Speicheradresse 63 rumzuwurschteln.


Ist das dann nicht enorm gefährlich ? Oder merkt er: Oh, die Stelle gehört nicht zu "meinem" Speicherbereich und bricht dann ab?
Danke für die Erklärung, über manche sachen liest man doch leider drüberweg
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.06.2006, 21:54 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,


C++:
TCHAR zeichen = (TCHAR)wParam;



TCHAR wird auf char bzw wchar umgemünzt beim visual Studio. kannst aber auch


C++:
char zeichen = (char)wParam;



benutzen, wenn du eh die Ansi-Variante benutzt

Ansonsten das "einzelne" Zeichen einfach in einen "string" zu casten halte ich gefährlich, wenn man z.b unicode benutzt, sind die bytes 3-4 vom wParam nicht umbedingt 0 bzw sind die evtl allgemein nicht, kann ja sonst was drinstehen, bzw dahinter auch sonstwas.

Wenn jeder so programmiert ists ja kein Wunder das die meiste Software für Windows und Windows selbst Sicherheitslücken oh mass hat
--
class God : public ChuckNorris { };

Dieser Post wurde am 18.06.2006 um 21:58 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.06.2006, 21:56 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von J-jayz-Z:

Zitat:
[...]weil der dann versucht an der Speicheradresse 63 rumzuwurschteln.


Ist das dann nicht enorm gefährlich ? Oder merkt er: Oh, die Stelle gehört nicht zu "meinem" Speicherbereich und bricht dann ab?



Ja genau das erkennt das Betriebssystem und bricht deshalb mit ner Access Violation ab.
Unter Windows hat grundsätzlich jeder Prozess die theoretischen 4GB Speicherplatz zur Verfügung.So etwas wie nicht mein Speicherbereich gibt es also nicht wirklich(zumindest nicht in dem Sinne dass du in den Speicher eines anderen Prozesses schreibst).
Die einzelnen Speicherseiten können sich aber in verschiedenen Zuständen befinden.
Wenn du versuchst auf Speicher zuzugreifen der nicht bereitgestellt und bestätigt ist endet das immer in ner Access Violation .

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 18.06.2006 um 21:58 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.06.2006, 00:40 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von FloSoft:


C++:
TCHAR zeichen = (TCHAR)wParam;



TCHAR wird auf char bzw wchar umgemünzt beim visual Studio. kannst aber auch


C++:
char zeichen = (char)wParam;





Genau das hatte ich versucht, habe aber dann nicht das richtige Zeichen bekommen, bzw. eben gar keins. Das TCHAR feiner ist ist klar, weil es je nach Unicode wchar_t oder char verwendet und das Zeichen somit soviel speicherplatz bekommt, wie es benötigt.
Aber bei:

C++:
TCHAR text = (TCHAR)&wParam;
TextOut(hdc,1,1,(LPCSTR)&text,1);


bekomm ich als Output immer á ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.06.2006, 05:14 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von J-jayz-Z:

Aber bei:

C++:
TCHAR text = (TCHAR)&wParam;
TextOut(hdc,1,1,(LPCSTR)&text,1);


bekomm ich als Output immer á ...


Damit castest du die Adresse von wParam in ein TCHAR und übergibst dann die Adresse von deinem TCHAR text,in dem aber die Speicheradresse von wParam steht und nicht der Wert,an TextOut .

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: