C++ SendMEssage Problem

02/11/2010 19:02 Σternαl.#31
Bitte helf mir einfach weiter D:
Du hast mich jetzt sowas von verwirrt, gib mir einfach pls
den fertigen Source und erklärs mir, wenn du so nett wärest :(
Danke.

Und bitte bleib so nett wie du jetzt warst und denk daran,
dass ich noch in den Anfängen des Programmierens bin :)
02/11/2010 19:10 MrSm!th#32
Quote:
Originally Posted by Adroxxx View Post
Nein. NULL ist nicht 0. (null)
NULL ist eine Referenz. Bei C++ weist es darauf hin, dass ein Pointer niergens hinzeigt. Bei Java zB. das kein Objekt referenziert wird.
Aber wenn man sich die Definition ansieht:

Code:
 #define NULL 0
Liegt es doch nahe, zu glauben, es sei das selbe ;)
Aber ich frage mich, wie eine Funktion dann beim Parameter zwischen 0 und NULL unterscheiden kann...
Oder würde bei
Code:
bool foo(int i)
{
      if(i==NULL)
            return true;
      if(i==0)
            return false;
}
foo(NULL); und foo(0); etwas anderes returned werden? o.O
Wie geht das denn dann, wenn es als 0 defined ist? :D
Also ich habe es auch so gelernt, wie flo geschrieben hat.
(und Stroustrup meint auch, das NULL Makro wäre nicht sehr schön^^)
Quote:
Die Aussage, dass er NULL ahnung hat, war einfach nur ein wortspiel.
Also so weit kann ich auch noch denken :awesome:
Quote:
Originally Posted by flo8464 View Post
NULL ist alter C-Stil, es ist völlig egal ob 0 oder NULL.
Aber es ist durchaus beliebter Stil Zeiger mit NULL auf 0 zu setzen, Integer mit 0. ;)
Ist mir ja klar, so habe ich es auch aus Stroustrups Buch gelernt.

Quote:
Originally Posted by FooFightah View Post
Bitte helf mir einfach weiter D:
Du hast mich jetzt sowas von verwirrt, gib mir einfach pls
den fertigen Source und erklärs mir, wenn du so nett wärest :(
Danke.

Und bitte bleib so nett wie du jetzt warst und denk daran,
dass ich noch in den Anfängen des Programmierens bin :)
Ähm nunja...nun schließe ich mich auch an:

C&P hilft dir nicht weiter, lern erst die Grundlagen oder denk mal logisch nach ;)
Er hat nichts wirklich kompliziertes gesagt, wenn man die Grundlagen kennt.
02/11/2010 19:11 Bot_interesierter#33
@flo
bist du dir sicher das der lparam den KeyCode nimmt?
Also laut msdn müsste wparam den Keycode nehmen, schau mal hier [Only registered and activated users can see links. Click Here To Register...] und hier [Only registered and activated users can see links. Click Here To Register...]
02/11/2010 19:12 Σternαl.#34
Compiliert einwandfrei, aber im Spiel tut sich immernoch nichts oO
02/11/2010 19:15 flo8464#35
Uhhh, ja, kann gut sein, ich habe nur kurz MSDN aufgeschlagen und da wurde nicht darauf
eingegangen.

Ich habe nie irgendwelche Keystrokes geschickt, mit C++ injected man einfach seine DLL und ruft entsprechende Engine-Funktionen auf. Wenn man auf OutOfProcess steht bietet sich sowieso eher Python oder C# an...
02/11/2010 19:17 Σternαl.#36
Und wie sieht der Source jetzt aus, wenn lParam keine KeyCodes nimmt?
02/11/2010 19:23 MrSm!th#37
Lies doch die Texte :rolleyes: Dann nimmste den wParam dafür
02/11/2010 19:34 Σternαl.#38
Also da, wo dann NULL steht (ist doch wParam) auch keystroke hin und bei keystroke NULL?
SendMessage(wHandle, WM_KEYDOWN, NULL, keystroke);
↓↓
SendMessage(wHandle, WM_KEYDOWN, keystroke, NULL); ?

und

LPARAM keystroke = LOWORD(VkKeyScanA(character));
↓↓
WPARAM keystroke = LOWORD(VkKeyScanA(character)); ?
02/11/2010 19:41 flo8464#39
Ja. Und ersetz mal LOWORD durch LOBYTE
02/11/2010 19:51 Σternαl.#40
Nope, es rührt sich immernoch nichts.
PHP Code:
#include <iostream> 
#include <windows.h> 

using namespace std

HWND wHandle FindWindow(0,L"Guild Wars");
void sendKeystroke(char character

    
WPARAM keystroke LOBYTE(VkKeyScanA(character)); 

    
SendMessage(wHandleWM_KEYDOWNkeystrokeNULL); 
    
SendMessage(wHandleWM_CHARkeystrokeNULL); 
    
Sleep(20); 
    
SendMessage(wHandleWM_KEYUPkeystrokeNULL); 
}

int main() 

        
cout << "Starteee!!!!" << endl
 
        
HWND wHandle FindWindow(0,L"Guild Wars"); 
        if(!
wHandle
        { 
            
cout << "Starte das verdammte Spiiiieeeelll!!!!"  
            
<< " Errorcode: " << GetLastError() << '\n' << endl
        } 
     
        else 
        { 
            
cout << "WindowHandle: " << wHandle << endl;

            while(
wHandle)
            {
                
sendKeystroke('w');
            } 
        } 

02/11/2010 19:56 Adroxxx#41
@smith:
ja stimmt, in c++ ist das etwas unsauber da ist NULL mit 0 definiert. In java aber nicht :P ^^
02/11/2010 20:01 Σternαl.#42
Adroxxx kannst du mir vllt helfen?
Hab jetzt nochmal was geändert, aber mein Chara läuft nicht.
PHP Code:
#include <iostream> 
#include <windows.h> 

using namespace std

HWND wHandle FindWindow(0,L"Guild Wars");
void sendKeystroke(char character

    
WPARAM keystroke LOBYTE(VkKeyScanA(character)); 

    
SendMessage(wHandleWM_KEYDOWNkeystrokeNULL); 
    
SendMessage(wHandleWM_CHARkeystrokeNULL); 
    
Sleep(20); 
    
SendMessage(wHandleWM_KEYUPkeystrokeNULL); 
}

int main() 

        
cout << "Starteee!!!!" << endl
 
        
HWND wHandle FindWindow(0,L"Guild Wars"); 
        if(!
wHandle
        { 
            
cout << "Starte das verdammte Spiiiieeeelll!!!!"  
            
<< " Errorcode: " << GetLastError() << '\n' << endl
        } 
     
        else 
        { 
            
cout << "WindowHandle: " << wHandle << endl;

            while(
wHandle)
            {
                
sendKeystroke('w');
            } 
        } 

02/11/2010 20:09 flo8464#43
Und die Moral der Geschichte:

DirectX-Spiele haben keinen Message-Loop sondern nutzen Direct Input was bedeutet dass deine ganzen SendMessage Calls ins Leere gehen, wie von mir bereits auf Seite 2 angedeutet.
02/11/2010 20:14 Σternαl.#44
Und welche Befehle triggern bei DirectInput?
PostMessage oder wie kann ich das jetzt anders machen?
€dit: Hmm, auf Wiki stand jetzt, dass DirectInput die Windows
Messages umgeht und direkt auf die Hardware geht (oder so ähnlich).
Heißt das jetzt, dass ich mit C++ nicht weiter komme, muss ich das über AutoIt machen?
02/11/2010 20:32 flo8464#45
Nein, du kommst jediglich mit SendMessage nicht weiter.
Die Idee, dass du mit AutoShit mehr machen könntest als mit C++ ist idiotisch, vergiss die wieder. ;)

Hier mal der Source von AutoIt: [Only registered and activated users can see links. Click Here To Register...]
Viel Spaß beim Lesen. Sieh es als Übung an.

Edit: hier der ganze Source: [Only registered and activated users can see links. Click Here To Register...]