Mit WM_SETTEXT Text in fremdes Programm schreiben ?



  • @mike84
    Wie kommst auf des? 😮
    STIMMT! 🤡



  • BigSigi schrieb:

    @mike84
    Wie kommst auf des? 😮
    STIMMT! 🤡

    Naja - haste selber in dein Profil eingetragen! 🙄



  • @Nemesyzz
    Hatte ich ganz vergessen! 😃
    Hab ich nicht immer drinnen stehen gehabt, deshalb.
    MFG, Sigi

    PS: Weiß nicht warum die Frage überhaupt kam 🙄



  • BigSigi schrieb:

    PS: Weiß nicht warum die Frage überhaupt kam 🙄

    Wal i a a Steirer bin 😃 Wollte nur wissen, ob du die österreichische Steiremark meinst 😃



  • Ich stehe gerade vor dem gleichen bzw. ähnlichen Problem.

    Ich habe einen Editor, der einen Text bekommt. Dieser soll dann gleich weiter an Word, Editor oder WordPad geleitet werden.

    Ziel ist es, daß mein Editor nachher versteckt läuft und der Text an die Cursorposition des aktiven Fensters geschrieben wird.

    Mein erster Ansatz war nun am Ende den Text direkt in das Edit-Feld des Notepads zu posten, was auch gelang. Jedoch gelang mir das mit Word bzw dem WordPad nicht, da ich kein Handle auf die entsprechenden Edit-Felder bekam.

    WM_KEYDOWN sollte ich ja auch direkt an ein Fenster senden können, oder?
    Leider klappte das bei mir nicht oder ich habe noch nen Haken drin.

    Hier mal ein kleines Codebeispiel:

    CString strText = "Hallo Welt";
    HWND hWnd = ::FindWindow((LPCTSTR)"Notepad", NULL);
    for( int i=0; i < strText.GetLength(); i++ )
    {
    	WPARAM wParam = (WPARAM)strText.GetAt(i);
    	::SendMessage(hWnd, WM_KEYDOWN,wParam,(LPARAM)0);
    }
    


  • Hi!
    Probier mal

    CWnd* pWnd = FindWindow(NULL,"Dokument - WordPad");
    if(pWnd) {
       HWND hWnd;
       pWnd->GetDlgItem(0xE900, &hWnd);
       ASSERT(IsWindow(hWnd));
       CWnd* pCtrl = (CWnd*)CWnd::FromHandle(hWnd);
       ((CRichEditCtrl*)pCtrl)->ReplaceSel("Hallo WorPad");
    }
    

    mfg



  • mike84 schrieb:

    Hi!
    Probier mal

    CWnd* pWnd = FindWindow(NULL,"Dokument - WordPad");
    if(pWnd) {
       HWND hWnd;
       pWnd->GetDlgItem(0xE900, &hWnd);
       ASSERT(IsWindow(hWnd));
       CWnd* pCtrl = (CWnd*)CWnd::FromHandle(hWnd);
       ((CRichEditCtrl*)pCtrl)->ReplaceSel("Hallo WorPad");
    }
    

    mfg

    werde ich morgen mal machen.

    wie kommste an die id von dem edit feld? ich sehe da nicht sonderlich viel mit spy++

    So habe mir das nochmal in meinem Quellcode angeguckt. Auf die 0xE900 kam ich auch, aber ich griff halt mit:

    ((CRichEditCtrl*)pCtrl->Paste();
    

    darauf zu und das wollte er nicht.

    Aber sollte ich das nicht auch schaffen wenn ich nen KeyDown an das Zielfenster/ aktive Fenster schicke? Dragon Naturally Speaking macht es ja auch zum Beispiel in egal welcher Applikation.



  • Hi!
    Also bei mir geht das Paste auch. Du darfst nur nicht direkt auf Edit ähnliche Klassen zugreifen. Bei einem Button würde ein Findwindow mit direktem CButton Pointer genügen.

    mfg



  • Komisch bei Paste ging es nicht bei mir. Der Code war der gleiche. Ich habe halt nur Paste() mit ReplaceSel() ersetzt und dann ging es. Die Lösung wurde ja schon weiter oben beschrieben.

    Nur frage ich mich jetzt wie ich es generell in das aktive Fenster pasten kann 😕

    Ich kann mir ja schlecht zur Laufzeit die Steuerelement-ID herausziehen.

    Hast Du dazu vielleicht noch eine Idee?



  • Hi!
    Ähmm ist nur so ne Frage, aber war was im Arbeitsspeicher drinnen? 😃
    Wenn ja, könnte es sein, dass M$ bei einer neuen WordPad Verion die ID geändert hat. Was sagt dein Spy++?

    mfg



  • Ich kopierte gerade frisch den Text in die Zwischenablage und das WortPad lief die ganze Zeit durch.

    Mit dem ReplaceSel() funktioniert es ja gut.

    Prima wäre es jetzt noch sowas für jede beliebige Anwendung hinzukriegen. Aber mit dem Lösungsweg wird es ja nicht klappen. Ich bin ja immer auf das Spy++ angewiesen.



  • Hi!
    Naja. Du könntest ja EnumWindows nutzen oder http://www.codeproject.com/dialog/windowfinder.asp nutzen
    Das mit dem Paste versteh ich nicht. Geht bei mir einwandfrei. Welches Win / VC hast du?

    mfg



  • Danke das werde ich mir nochmal angucken.

    Ich habe Windows2000 und Visual Studio 6.0


Anmelden zum Antworten