Sorry, finde ein Thema nicht mehr - Tastendruck senden



  • HWND hWin = FindWindow(NULL, "pass.txt - Editor");
    SetForegroundWindow(hWin);
    keybd_event(65,0,0,NULL);  // sendet "a"
    

    Dieser Code sendet "a" an den Texteditor (zum testen)
    Ich möchte jedoch den Text eines Memos senden.
    Ich habe mal eine Funktion hier im Forum gefunden, finde sie aber leider nicht mehr wieder. Außredem hat sie bei mir nicht funktioniert. Soll ein Webinterface für nen Gameserver werden.



  • Meinst du diese Funktionen hier?

    // Drückt eine Taste runter...
    void PressKeyDown(WORD wd)
    {
        keybd_event(wd,0,0,0);
    }
    // Lässt eine Taste los...
    void PressKeyUp(WORD wd)
    {
        keybd_event(wd,0,KEYEVENTF_KEYUP,0);
    }
    // Simuliert einen kurzen Tastendruck
    void PressKey(WORD wd)
    {
        PressKeyDown(wd);
        // Bei langsamen PCs sollte man noch das hier verwenden:
        // Sleep(10);
        PressKeyUp(wd);
    }
    // Funktion um einfache Sonderzeichen in Char zu WORD zu konvertieren
    WORD CharToWORD(char C)
    {
        WORD wd;
        switch(C)
        {
            case '.':
                wd=190;
                break;
            case ',':
                wd=188;
                break;
            case '-':
                wd=189;
                break;
            case '+':
                wd=187;
                break;
            default:
                wd=C;
        }
        return wd;
    }
    // Funktion zum tippen von Texten
    void TypeWord(String Word)
    {
        Word=Word.UpperCase();
        WORD wd;
        for (int i=1;i<=Word.Length();i++)
        {
            wd=CharToWORD(Word[i]);
            PressKey(wd);
        }
    }
    

    Geh vorsichtig damit um! *g*



  • Oder du machst das ganz anders:

    #include <clipbrd.hpp>
    //.......
    TClipboard* cbCopy=new TClipboard;
    cbCopy->SetTextBuf(Memo1->Text.c_str());
    delete cbCopy;
    SetForegroundWindow(FindWindow(NULL, "pass.txt - Editor"));
    keybd_event(VK_CONTROL,0,0,0);
    keybd_event('V',0,0,0);
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    keybd_event('V',0,KEYEVENTF_KEYUP,0);
    

    Aber warum so schwer, wenn es auch einfacher geht:

    TStringList* slTemp=new TStringList;
    slTemp->LoadFromFile("pass.txt");
    for (int i=0;i<Memo1->Lines->Count;++i)
      slTemp->Add(Memo1->Lines->Strings[i]);
    slTemp->SaveToFile("pass.txt");
    delete slTemp;
    


  • Sorry, ich hatte keine Zeit zum Antworten!
    Ich werde das nun mal versuchen!
    Ich habe eine andere Funktion gesehen (ziehmlich lang jeder einzelle Buchstabe wird überprüft, also dann gesendet.)



  • Vielen Dank an euch ihr habt mir sehr viel weitergeholfen!
    Und zwar liegt das programm auf meinem Server und soll die daten aus einem Webinterface verarebtien, die mit php geschriebn wurden, um diese dann an den server zu senden und enter zu drücken! Geht einfach genial THX!



  • Das geht jetzt alles, aber ich will ja, dass er nur befehle sende wenn jemand auf ner seite nen button klickt! wenn ich auf der seite was eingebe, dann wir es in der meldung.txt gespeichert und das programm ließt es aus und sendet es per timer an den gameserver ! geht alles! nur soll er nur einmal senden und nich alle 5 sekunden (timer):

    Memo1->Lines->LoadFromFile("meldung.txt");
    TClipboard* cbCopy=new TClipboard;
    cbCopy->SetTextBuf(Memo1->Text.c_str()); 
    delete cbCopy; 
    SetForegroundWindow(FindWindow(NULL, "Vietcong v1.60 : =VCCF= www.vccf.de : 5425")); 
    keybd_event(VK_CONTROL,0,0,0); 
    keybd_event('V',0,0,0); 
    keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
    keybd_event('V',0,KEYEVENTF_KEYUP,0);
    
    //ENTER DRÜCKEN!
    keybd_event(VK_RETURN,0,0,0);
    


  • =VCCF= DJDaPle schrieb:

    nur soll er nur einmal senden und nich alle 5 sekunden (timer)

    Dann musst du nach dem Senden den Timer halt deaktivieren (und vor dem nächsten Senden wieder aktivieren).

    Übrigens funktioniert die Suchfunktion wieder:
    http://www.c-plusplus.net/forum/viewtopic.php?t=8132&highlight=keybdevent

    Und zu Windoofs Vorschlag mit TClipboard siehe bitte hier.



  • Ich habe jetzt eine lösung gefunden!
    Mit PHP schreibe ich den inhalt, warte 2 Sekunden und flushe (flush();)
    In meinem Programm warte ich 3 Sekunden mit dem Timer, sodass er so ihrgendwie immer genau kurz befor PHP den Inhalt löscht die Datei ausliest und an die vcded.exe sendet!


Anmelden zum Antworten