Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:01

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C++ SendMEssage Problem

Discussion on C++ SendMEssage Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old 02/10/2010, 21:15   #16
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Werd ich mal machen, brauch ich dann immernoch den
Key, den Adroxxx gepostet hat?
Btw wo bei Adroxxx Beispiel muss ich eintragen,
welche Taste gedrückt werden soll?
Und ist das ok, wenn vor dem lParam NULL steht?
Σternαl. is offline  
Old 02/10/2010, 21:33   #17
 
flo8464's Avatar
 
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
Probier es mal so:

Code:
void sendKeystroke(char character)
{
    LPARAM keystroke = LOWORD(VkKeyScanA(character));

    SendMessage(wHandle, WM_KEYDOWN, NULL, keystroke);
    SendMessage(wHandle, WM_CHAR, NULL, keystroke);
    Sleep(20);
    SendMessage(wHandle, WM_KEYUP, NULL, keystroke);
}
Edit: Upps, das ist praktisch der Code von Androxx, nur anders verpackt.
flo8464 is offline  
Old 02/10/2010, 21:48   #18

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,323
Quote:
Originally Posted by FooFightah View Post
Werd ich mal machen, brauch ich dann immernoch den
Key, den Adroxxx gepostet hat?
Btw wo bei Adroxxx Beispiel muss ich eintragen,
welche Taste gedrückt werden soll?
Und ist das ok, wenn vor dem lParam NULL steht?
-.-

würd echt helfen wenn du einfach mal lesen würdest was ich schreibe.
Ich hab dir doch den Link zu der Klasse geschickt. Haste dir bestimmt nichtmal angeschaut.

PHP Code:
void CBotEngine::SendKey(unsigned int KEYDWORD DELAY)
{

    
LPARAM pmLparam = (::MapVirtualKey(KEY,0)<<16);
    
    
pWnd->PostMessage(WM_KEYDOWN,0,pmLparam);
    
pWnd->PostMessage(WM_CHAR,0,pmLparam);
    
Sleep(DELAY); 
    
pWnd->PostMessage(WM_KEYUP,0,pmLparam);
         

Aufruf ist wie im Thread der Klasse beschrieben zB SendKey(VK_K); SendKey(VK_ENTER) ; usw.

Diese Methode ist aber nur für einen Tastendruck.
Wenn du zB einen Text senden willst musst du das anders machen. Steht aber auch in der Klasse beschrieben
Adroxxx is offline  
Thanks
1 User
Old 02/11/2010, 13:14   #19
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Sry Adroxx, aber ich hab kein MFC und in deinem Post sind nur
Sachen für MFC, deswegen hilft mir SendKey(VK_ENTER) nicht weiter.

und @ flo:
Habs eingefügt, aber der Compiler meckert rum:
Σternαl. is offline  
Old 02/11/2010, 13:21   #20

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,323


ich sag einfach nix mehr. wird langsam lächerlich.
Du weißt, dass MFC einfach so rießengroße Klasse ist die zusätzliche Methoden und elementare typen liefert? Das heißt an der Art der Programmierung ändert sich nichts.
Ich habe oben schonmal geschrieben, was MFC Spezifisch ist, das ist nur der CWnd Handle, und dass ist CString. Den rest kannst du was 1:1 so übernehmen.
Naja egal,
viel glück noch

@screenshot:
Ist nicht böse gemeint, aber lern doch bitte erstmal nomral programmieren bevor du dich an solche sachen ranwagst.
Der screenshot zeigt mir, dass du NULL ahnung hast. (NULL steht nicht für 0 sondern einer referenz ins leere die besagt es existiert nicht)

du hast in die while schleife
void sendKeystroke(char character)
Adroxxx is offline  
Old 02/11/2010, 13:23   #21
 
flo8464's Avatar
 
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
*Hust*

Adroxxx und ich haben dir eine fertige Funktion gepostet, die fügst du nicht mitten in einer andere Funktion ein, sondern so....

Code:
while(wHandle)
    sendKeystroke('w');
flo8464 is offline  
Old 02/11/2010, 14:22   #22
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Ja, ich habs ja auch einfach nur 1:1 von flo übernommen.
Und wenn du es gelesen hättest, ich hab nicht behauptet,
C++ programmieren zu können, sondern ich hab gesagt, dass
ich ein Anfänger bin. Und ich wollte einfach einen Bot programmieren,
weil ich mich dadurch auch "weiterbilden" kann, so lern ichs eigendlich
mit am besten. Wenn ich etwas programmieren will, frag ich Leute die sich
damit auskennen und die erklären es mir dann, damit ich es auch lerne.
Nur find ich es schade, wenn ich etwas lernen möchte bzw. etwas noch
nicht kann und ihr kommt mit "Lern erstmal Programmieren" oder
"An deiner Stelle würd ich das Programmieren aufgeben".....
Das fördert nicht gerade die Motivation zum Lernen.
Also nochmal für alle: Ich bin absoluter Anfänger und ich will nicht,
dass jemand nen Bot für mich schreibt, sondern dass ich es lerne
und auch verstehe. Aber wenn man hier so zugeflamed wird.....
Und jeder fängt mal klein an....
Σternαl. is offline  
Old 02/11/2010, 15:29   #23
 
elite*gold: 20
Join Date: Sep 2006
Posts: 1,100
Received Thanks: 184
Du musst laufen lernen bevor du anfängst einen Marathon zu laufen.

Wenn du noch überhaupt keine Ahnung vom Programmieren hast, dann ist es denkbar schlecht mit Windows API Programmierung einzusteigen und direkt einen Bot entwickeln zu wollen, das wird so nichts.

Übrigens die Lösung für dein 'Problem' habe ich schon auf Seite eins gepostet, inklusive einer Liste mit allen möglichen VirtualKey Codes, wenn du anhand der Dokumentation auf MSDN nicht in der Lage bist heraus zu finden wie man eine WM_KEYDOWN message mit SendMessage benutzt, dann bist du einfach noch nicht bereit mit der Windows API zu programmieren.

Entweder du setzt dich hin und lernst die Grundlagen von C++ oder du lässt es bleiben, denn so müsste dir jeder einzelne Schritt von irgendjemandem erklärt werden und wirklich was lernen würdest du dabei auch nicht.
Bot_interesierter is offline  
Old 02/11/2010, 17:07   #24
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
@Bot:
Da hast du schon Recht.
Vllt ist das auch etwas zu weit für mich, aber ich möchte es halt gerne lernen.
Btw: Deine Lösung klappt auch nicht, oder vllt hab ich auch wieder was falsch gemacht....
Und @Adroxxx & flo:
Ich verstehe jetzt nicht genau, was ihr meint, wo ich euren Code einfügen muss.
Ich hab das unter Garantie falsch gemacht, weil der Compiler dauernd
"nichtdeklarierter Bezeichner" sagt.
Also hier nochmal alle 3 Sources:

Flo's Variante:
==> Compiler:
wHandle: nichtdeklarierter Bezeichner,
sendKeystroke: Lokale Funktionsdefinitionen sind unzulässig.
Wenn ich "HWND wHandle = FindWindow(0,L"Guild Wars"); " nochmal in die
Funktion hinein schreibe, lößt sich das 1. Problem, aber das mit dem
sendkeystroke krig ich nicht weg, vllt ist das ja falsch gescrieben oder der
Header/die Lib fehlt, kA....
----------------------------------------------------------------------------

Adroxxx's Variante:
==> Compiler:
DELAY: nichtdeklarierter Bezeichner,
KEY: nichtdeklarierter Bezeichner.
Ich brauch natürlich Werte für DELAY und KEY, aber welche Werte kommen
da rein bzw. muss ich mir die über ne Funktion besorgen?
----------------------------------------------------------------------------

Bot's Variante:
==> Compiliert ohne zu meckern.
Aber, wie schon erwähnt klappt es nicht.
----------------------------------------------------------------------------

Und nochmal zum Abschluss:
Wenn ich jetzt etwas falsch gemacht habe, bitte motzt mich nicht an.......
Mir wärs lieber, ihr würdet einfach den fertigen Source-Teil posten
und mir sagen, was ich falsch gemacht hab/wie es jetzt funktioniert
.

Und btw vllt interessierts euch.
Was ich mir eigendlich von dem Post/euren Antworten erwartet hätte:

- Lösung des Problems
- Nicht so viel gemecker, ich bin wie gesagt noch ein Anfänger...
- Ein Post wie:
"Also SendKey kann man dafür benutzen, um Tastendrücke zu simulieren,
da lagst du schon richtig. Aber ????? hast du falsch gemacht.
SendKey brauch die 4 Parameter ??????.
Das 1. Parameter ist der Handle, den du dir ja schon per FindWindow geholt hast,
das 2. Parameter ist ?????, das krigst du indem du ?????.
Das 3. Parameter ist ?????, da hast du folgende Möglichkeiten: ?????.
Das 4. Parameter ist ?????, das holst du dir mit ?????
- Und dann hätte ich mir wenigstens erwartet, dass ich in weniger als 2 Tagen
mein Problem gelößt habe und gelernt habe, wie man Tastendrücke simuliert
bzw. wie man Bots schreibt.
Σternαl. is offline  
Old 02/11/2010, 17:42   #25
 
flo8464's Avatar
 
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
Code:
void function();

int main()
{
    function();
}
So halt. Du kannst keine neuen Funktionen innerhalb einer anderen deklarieren.
flo8464 is offline  
Old 02/11/2010, 17:55   #26
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Hmm jetzt siehts so aus:

Aber klappen tuts immernoch nicht.
Oder der macht nur so ne kleine Bewegung (mit w), dass ich es nicht sehe.
Wie krig ich das denn jetzt permanent hin, dass er permanent w drückt,
wenn ich keine While-Schleife benutzen darf?
Σternαl. is offline  
Old 02/11/2010, 18:21   #27


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by Adroxxx View Post
Der screenshot zeigt mir, dass du NULL ahnung hast. (NULL steht nicht für 0 sondern einer referenz ins leere die besagt es existiert nicht)
Mal eher eine generelle Frage:

Soweit ich weiß, ist NULL doch als 0 definiert.
Wie kann es dann sein, dass
1. es funktionen gibt, die zwischen 0 und NULL beim Parameter unterscheiden?
2. du es eben nicht als 0 definierst, sondern als leere Referenz (also zb. Zeiger werden mit NULL deklariert, int's mit 0), obwohl es doch im Header als 0 defined ist?
MrSm!th is offline  
Old 02/11/2010, 18:28   #28
 
Σternαl.'s Avatar
 
elite*gold: 20
Join Date: Dec 2009
Posts: 1,850
Received Thanks: 484
Thx Smith, du hast mein Problem gelößt!
Σternαl. is offline  
Old 02/11/2010, 18:45   #29

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,021
Received Thanks: 5,323
Quote:
Originally Posted by FooFightah View Post
@Bot:

Adroxxx's Variante:
==> Compiler:
DELAY: nichtdeklarierter Bezeichner,
KEY: nichtdeklarierter Bezeichner.
Ich brauch natürlich Werte für DELAY und KEY, aber welche Werte kommen
da rein bzw. muss ich mir die über ne Funktion besorgen?
Ich bekomme echt Kopfschmerzen.
Natürlich ist DELAY und KEY nicht definiert bei dir.
Schau dir doch den Header der Klasse an. Das sind Übergabeparameter.
Du kannst wenn du eine Funktion hast nicht einfach die Funktion in eine While Schleife copypastan .

Quote:
Originally Posted by MrSm!th View Post
Mal eher eine generelle Frage:

Soweit ich weiß, ist NULL doch als 0 definiert.
Wie kann es dann sein, dass
1. es funktionen gibt, die zwischen 0 und NULL beim Parameter unterscheiden?
2. du es eben nicht als 0 definierst, sondern als leere Referenz (also zb. Zeiger werden mit NULL deklariert, int's mit 0), obwohl es doch im Header als 0 defined ist?
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.

Die Aussage, dass er NULL ahnung hat, war einfach nur ein wortspiel.
Adroxxx is offline  
Old 02/11/2010, 18:49   #30
 
flo8464's Avatar
 
elite*gold: 0
Join Date: Nov 2008
Posts: 161
Received Thanks: 38
Quote:
Originally Posted by MrSm!th View Post
Mal eher eine generelle Frage:

Soweit ich weiß, ist NULL doch als 0 definiert.
Wie kann es dann sein, dass
1. es funktionen gibt, die zwischen 0 und NULL beim Parameter unterscheiden?
2. du es eben nicht als 0 definierst, sondern als leere Referenz (also zb. Zeiger werden mit NULL deklariert, int's mit 0), obwohl es doch im Header als 0 defined ist?
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.
Stroustup hat dazu sogar etwas geschrieben:

Quote:
In C++, the definition of NULL is 0, so there is only an aesthetic difference. I prefer to avoid macros, so I use 0. Another problem with NULL is that people sometimes mistakenly believe that it is different from 0 and/or not an integer. In pre-standard code, NULL was/is sometimes defined to something unsuitable and therefore had/has to be avoided. That's less common these days.

If you have to name the null pointer, call it nullptr; that's what it's going to be called in C++0x. Then, "nullptr" will be a keyword.
@FooFightah:

Code:
#include <iostream> 
#include <windows.h> 

using namespace std;  

void sendKeystroke(char character) 
{ 
    LPARAM keystroke = LOWORD(VkKeyScanA(character)); 

    SendMessage(wHandle, WM_KEYDOWN, NULL, keystroke); 
    SendMessage(wHandle, WM_CHAR, NULL, keystroke); 
    Sleep(20); 
    SendMessage(wHandle, WM_KEYUP, NULL, keystroke); 
}

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(true)
            {
                sendKeystroke('w');
            } 
        } 
}
Brr, Spoonfeeding.
flo8464 is offline  
Thanks
1 User
Reply

Tags
c++, problem, sendmessage


Similar Threads Similar Threads
C++ SendMessage Problem
08/02/2010 - C/C++ - 1 Replies
Also ich versuche gerade in C++ einen kleinen Spammer zu programmieren habe aber leider ein Problem. Mein Code: #include <iostream> #include <windows.h> #include <string> using namespace std;
delphi sendmessage
07/27/2010 - General Coding - 3 Replies
hallo leute ich hab mal eine frage ob mir jemand kurz erläutern könnte wie ich mit sendmessage eine mausbewegung in einem minimierten fenster ausgebe ich habe embarcadero rad studio 2010 hier ist der bisherige "source": uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm)
[Help] C# SendMessage()
05/11/2010 - CO2 Programming - 19 Replies
I'm currenty trying to use the SendMessage Function with CO. According to msdn I need to use this: static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); My question is: How do I find the hWnd? What are the wParam and lParam? And what can I use as wParam and lParam? Any help will be greatly appreciated.
sendmessage?
12/26/2008 - CO2 Programming - 0 Replies
just wondering how it works in C# tried few tutorials with notepad in it and it doesnt send the letters/close it even it finds the window this is how i got it so far (pretty much copypasted, just to see how it works...) private static extern IntPtr FindWindow(string winClass, string WinName); private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); private static extern IntPtr PostMessage(IntPtr hWnd,...
how do i sendmessage a password box
05/11/2007 - Conquer Online 2 - 11 Replies
HI, I'm trying to sendmessage the password to the password box. It gives me the *** in the box but when i click the enter button it gives me the wrong password error. any help would be appreciated



All times are GMT +2. The time now is 18:01.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.