Text über Tastatur ausgeben



  • Folgendes brauche ich:

    ich habe Textfeld in dem ich einen Text eingebe. Dieser ist logischerweise veränderbar.

    Wenn ich dort nun das Wort Hallo eingebe, soll das Wort Hallo über Keyevents ausgegeben werden. Also Taste H, A, L, L, O. Wie geagt. Im Textfeld kann auch was anderes stehen.

    Ich weiss das es mit dem Clipboard einfacher geht, Kann diese Funktion aber nicht gebrauchen.


  • Administrator

    int nChar = 0;
    CString strText; // strText ist der String zughörig zum Textfeld.
    for(int i = 0; i < strText.GetLength(); ++i)
    {
        nChar = static_cast<int>(strText.GetAt(i));
    
        PostMessage(WM_CHAR, nChar, 0);
        // oder
        SendMessage(WM_CHAR, nChar, 0);
        // oder
        ::PostMessage(NULL, WM_CHAR, nChar, 0);
        // oder
        ::SendMessage(m_hWnd, WM_CHAR, nChar, 0);
        // oder wie bzw. an was auch immer du die Nachricht senden willst
    }
    

    Hoffe konnte dir helfen.

    Grüssli



  • Firefighter2000 schrieb:

    Folgendes brauche ich:

    ich habe Textfeld in dem ich einen Text eingebe.

    Ey man ey wo hätte gedacht dass Textfeld ist legal? Wo hätte gedacht
    dass da Text rein? Ich habe Döner!

    Firefighter2000 schrieb:

    Wie geagt. Im Textfeld kann auch was anderes stehen.

    Ja ey man ich finde das auch agge ey, voll ey. Aber dafür habe ich anti
    agging, ey!



  • Glaube ich hab mich schlecht ausgedrückt.

    Also nochmal.

    Ich habe ein Textfeld. In dem steht z.B. Hallo.

    nun will ich über einen Tastendruck diesen Text z.B. in Word einfügen.

    LRESULT CPHMakroPLUSPLUSDlg::OnHotKey(WPARAM wp, LPARAM lp)
    {
    
    	if (wp == m_nIDHotKey1)
    	{
    		UpdateData(true);
    
    		::keybd_event(VK_SPACE, 0, 0, 0); 
    		::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
    	}
    
    	UpdateData(false);
    
    	return 0;
    }
    

    Mit VK_SPACE führe ich ja nun nur ein Space aus.
    Ich will aber nun, da im Textstring HALLO steht, die Tasten H, A, L, L, O simulieren. Nur wie ?



  • Ja also... da war Draveres Vorschlag doch gut. Wenn de das Wnd von Word hast, kannst de mal Versuchen ob das klappt wenn de dem das schickst...

    void SendString(CString& strText, CWnd* pWnd)
    {
        if (!pWnd || !pWnd->IsVisible())
            return;
    
        int nChar = 0;
    
        for(UINT i = 0; i < (UINT)strText.GetLength(); ++i)
        {
            nChar = static_cast<int>(strText.GetAt(i));
    
            pWnd->PostMessage(WM_CHAR, nChar, 0);
        } 
    }
    

    Parameter:
    strText - Der Text, den das Fenster gesendet bekommen soll.
    pWnd - Zeiger auf das Fenster das den Text erhalten soll.

    Referenzen:
    CWnd::PostMessage



  • Danke schon mal.



  • Ich bekomms leider immer noch ned hin.

    Könnte sich jemand erbarmen, und einem dummie newbie mal posten, wie der code nun auszusehen hat ?


  • Administrator

    Was funktioniert denn nicht? Und was versuchst du zu machen? Zeig mal ein wenig Code, irgendwas woran wir dir helfen können.

    Grüssli



  • Hmm... Guck dir mit einem Programm deiner Wahl an, wie der Classname des Textwindows von Word ist... und dann noch evt. den namen... dann suchst de erstmal mit FindWindow das Word-Fenster und dann mit FindWindowEx das Childtextwindow... wo ist das Problem? Das gibst de dann als pWnd bei SendString an... strText ist der Text der dort erscheinen soll...


Anmelden zum Antworten