(WinAPI) In Fremdes memo etc.



  • ist es möglich via programm in ein fremdes memo/edit feld, dessen handle mir bekannt ist, einen text zu schreiben und dann den button der fremden software zu "simulieren" also tätigen..? falls ja, wie geht das genau?



  • hallo,

    selbstverständlich ist sowas möglich. um den text an das fenster zu senden, solltest du dich in:
    -FindWindow
    -FindWindowEx
    -SendMessage
    -PostMessage in zusammenhang mit VK_RETURN
    -PostMessage in zusammenhang mit VK_SPACE
    einlesen.

    um einen button einer fremden anwendung zu klicken solltest du bescheid wissen über:
    -FindWindow
    -SetForegroundWindow
    -keybd_event

    mfg
    murph



  • a) wozu findwindow? das fenster hat ein memo und ein edit. ich muss in das edit text beamen.

    b) SendMessage und PostMessage scheint das gleiche zu sein?



  • hallo,

    "
    a) wozu findwindow? das fenster hat ein memo und ein edit. ich muss in das edit text beamen.
    b) SendMessage und PostMessage scheint das gleiche zu sein?
    "

    unter windows sind alle elemente die ein handle besitzen fenster, also auch buttons, editfelder, undwoweiter...

    mit findwindow kannst du erstmal ermitteln, ob das fenster indem deine memo kompo ist überhaupt auf dem desktop vorhanden ist (hwnd = FindWindow("dasFenstermitderMemo", NULL);.
    ist dies der fall, so kannst du mit findwindowex speziell nach der memo auf diesem fenster suchen (hwnd = FindWindowEx(hwnd, 0, "Memo", NULL);
    dann kannst du mit sendmessge gezielt an das memo z. b. in einer schleife fortlaufend WM_CHAR botschaften schicken (for (int i = 1; i <= Str.Length(); i++) SendMessage(hwnd, WM_CHAR, (int)Str[i], 0);)

    wenn du nun das alles zusammbaust kannst du einer beliebigen anwendung mit "schreibfläche" text zuschicken...

    mfg
    murph



  • klappt nicht 😞

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HWND Window;
        String text = "test";
        Window = FindWindow("Unbenannt - Editor", NULL);
        FindWindowEx(Window,0,"Memo",NULL);
        SendMessage(Window,WM_SETTEXT,0,(LPARAM)(LPCTSTR)text.c_str());
    }
    


  • ne das kann auch nicht klappen mit WM_SETTEXT da sich der string in deinem prozess befindet und nicht im anderen. du könntest die tastatureingabe simulieren oder dich irgendwie in den anderen prozess injezieren is aber ne komplizierte sache *g*



  • Verschoben nach "WinAPI".


Anmelden zum Antworten