Text an anderes fenster schicken



  • Hallo,

    Ja stimmt ^^
    aber es wäre sehr umständlich tausende von zahlen in tastenanschläge einzugeben. Kann man nicht irgendwie einen String senden einfach?

    MFG,
    Tomo



  • Hallo

    du kannst auch WM_SETTEXT verwenden.

    bis bald
    akari



  • lol das is mir zu hoch diese seite xD



  • Hallo

    warum?

    AnsiString Text = "Text"; // Zu sendender String
    
    // Sendet den String an das Control das durch das Handle symbolisiert ist,
    // kann auch ein Handle aus einem fremden Fenster sein
    SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
    

    bis bald
    akari



  • WM_SETTEXT setzt üblicherweise den Text des Fenster-> in einer Form den Titel des Fensters, in einem Button den Text des Button (sind ja alles Fenster).

    M.E. wäre WM_COPYDATA besser geeignet:

    Das Senden:

    String test="Hallo Welt";
    COPYDATASTRUCT cds;
    cds.cbData=text.Length()+1;
    cds.lpData=text.c_str();
    SendMessage(HANDLE_DES_FENSTERS,WM_COPYDATA,NULL,(LPARAM)&cds);
    

    Die Message in der Headerdatei bekannt machen:

    ...
    private:	// Anwenderdeklarationen
      void __fastcall WmCopyData(TWMCopyData& Message);
    // Messagehandling deklarieren:
    ...
    BEGIN_MESSAGE_MAP
    	MESSAGE_HANDLER(WM_COPYDATA, TWMCopyData, WmCopyData)
    END_MESSAGE_MAP(TForm)
    

    Die Funktion in der CPP-Datei:

    void __fastcall TMain::WmCopyData(TWMCopyData& Message)
    {
    
    String test=(char*)Message.CopyDataStruct->lpData;
    }
    


  • Hallo

    COPYDATA nützt einen aber nur etwas, wenn du empfangende Anwendung darauf eingerichtet ist. Davon gehe ich aber bei der Beschriebung des OP nicht aus

    wie kann man ein String an ein anderes fenster schicken?

    bis bald
    akari



  • COPYDATA nützt einen aber nur etwas, wenn du empfangende Anwendung darauf eingerichtet ist.

    Settext auch, denn wenn ich die Message nicht abfange und gesondert behandele wird ja "nur" der Fentertitel geändert. Und den String habe ich dann nicht zur Bearbeitung zur Verfügung.



  • Hallo,

    akari schrieb:

    Hallo

    warum?

    AnsiString Text = "Text"; // Zu sendender String
    
    // Sendet den String an das Control das durch das Handle symbolisiert ist,
    // kann auch ein Handle aus einem fremden Fenster sein
    SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
    

    bis bald
    akari

    Hab es mal so gemacht...

    AnsiString Text = Edit1->Text; // Zu sendender String
    
    // Sendet den String an das Control das durch das Handle symbolisiert ist,
    // kann auch ein Handle aus einem fremden Fenster sein
    SendMessage(Edit1->Handle, WM_SETTEXT, 0, (long)(Text.c_str()));
    

    Habe auch Edit2->handle (edit: um zu testen ob es nur in der selben form geht) versucht aber das geht ja alles nur wenn es in der selben Form ist. Es soll ja an ein Programmexternes Fenster geschickt werden (wie z.b. msn-unterhaltungen)



  • Hallo

    dann must du den Handle des Controls herausfinden, der in der Zielanwendung für die Benutzereingabe zuständig ist. Das must du mit der WinAPI-Funktion FindWindow machen. Es gibt auch irgendwo ein Tool, um aus laufenden Programmen die nötigen Fenster- (Control-)namen auszulesen, die du für FindWindow brauchst.
    Schau dich besser im WinAPI-Forum um, dort gibt es sicher schon genug Threads zu diesem Thema.

    bis bald
    akari



  • ich weiß ja nicht aber ich glaube ich lass das ganz das ist zu hoch für mich


Anmelden zum Antworten