Text an ein an Programm senden



  • Hallo ihr lieben,

    ich bin dabei einige Befehle, die man sonst mit der Maus bzw
    über die Tastatur in ein anderes Programm eingeben würde
    über mein Programm zu versenden.
    Da ich aber noch sehr wenig Ahnung habe von C++/MFC bitte helfen.

    Ich habe das andere Programmfenster so gefunden:

    CWnd* hwndWingame=FindWindow("Spiel",NULL); //Spiel ist der Name im Titel 
    hwndWingame->SendMessage(WM_KEYDOWN, VK_RETURN,0); // ich sende einen Pfeil nach unten zum auswählen und Enter zur Auswahl.
    

    Nun muss ich allerdings an das Spiel Text senden:
    "Hallo Welt"

    Ich kann ja schlecht

    hwndWingame->SendMessage("Hallo Welt" ,VK_RETURN, MAKELPARAM(112,466));
    // 112,466 ist dabei die Pixelposition in der das Eingabefeld ist wo es
    //stehen soll.
    

    senden 😃

    Mit Spy++ bekomme ich leider keine Info welchen Button oderso man
    ansprechen könnte. Das Spiel ist halt kein klickibunti MFC-Windowsfenster *g*

    Hoffe ihr könnt helfen.Danke



  • Also das mit "112,466 ist dabei die Pixelposition" war unnötig,
    weil es nur ein Eingabefeld in dem Spiel gibt und das ist immer
    aktiv(hat den Focus).

    Ich muss jetzt also wirklich nur noch da einen Text in das
    Feld senden können.
    Ich schaffe es zwar die Titelleiste des Spiels zu verändern.
    Aber das ist es ja nicht, was ich machen will 😞

    Bitte erbarme sich einer.



  • Entweder du setzt den Text vom Edit mit SetWindowText/WM_SETTEXT (Handle bekommst du mit [msdn]GetDlgItem[/msdn]) oder du schickst die Buchstaben einzeln, z.B. mit [msdn]keybd_event[/msdn].



  • Hi, habe im moment wenig Zeit. Aber wie kann ich den
    GetDlgItem nutzen,wenn ich doch das Element nicht rausfinden kann?
    Die keybd_event Funktion scheint mir recht mühselig, weil ich ja CStrings
    habe und dann doch jeden Buchstaben einzeln wieder als keybd_event
    ermitteln und senden muss oder ?

    Sorry für Schreibfehler. Bin grad auf der Flucht *g*

    Hat jemand von euch evtl. Code wie man den CString an das
    aktive Fenster im (minimierten) Dialog(Spiel) senden kann ?



  • Servus,

    Eine kleine Idee von mir.... Ist zwar nicht die schönste aber sollte funzen:

    void CDeinDlg:SendTxt(CString strInput)
    {
       for (int i = 0; i <= (strInput.GetLength-1); i++
       {
          ::PostMessage(deinHwnd, WM_CHAR, (WPARAM)strInput[i], 0);
       }
       ::PostMessage(deinHwnd, WM_KEYDOWN, VK_RETURN, 0);
    }
    

    Der sendet zwar jeden Buchstaben einzeln aber sollte gehen. UNGETESTET ⚠

    *winke*
    Hellsgore



  • Danke für die Idee 🙂 Ich habs etwas verändert,
    aber bei:

    CString strInput;
    strInput="Test-Text by Viola :-)";
     for (int i = 0; i <= (strInput.GetLength-1); i++) 
    
       { 
          hwndWingame->SendMessage(WM_CHAR, (WPARAM)strInput[i], 0); 
       } 
          hwndWingame->SendMessage(WM_KEYDOWN, VK_RETURN, 0);
    

    bekomme ich:

    '-' : Ungültig, da der linke Operand vom Typ 'int (__thiscall CString::*)(void) const' ist 😕 😕



  • Sorry mein Fehler:

    Statt:

    for (int i = 0; i <= (strInput.GetLength-1); i++)
    

    Das:

    for (int i = 0; i <= (strInput.GetLength()-1); i++)
    

    die () haben gefehlt.

    *winke*
    Hellsgore



  • Thx a lot ! Es geht. JUHU 👍


Anmelden zum Antworten