Avatar billede the_saint Nybegynder
01. oktober 2005 - 09:40 Der er 10 kommentarer og
1 løsning

Skrive til Edit felt i andet program.

Hej eksperter ;D

Er det muligt at lave et c++ program, som kan skrive værdier i et andet program's Edit felter?
Og hvis ja, kan i give mig et hint til at komme videre :)

Mvh.
Mikkel
Avatar billede jpk Nybegynder
01. oktober 2005 - 12:26 #1
Ja, det kan sagtens lade sig gøre.
Under Windows kan du fx bruge FindWindow hvis du kender navnet på det vindue (den edit control) du vil ændre.
Du kan så bruge SetWindowText til at ændre indholdet.
Avatar billede the_saint Nybegynder
01. oktober 2005 - 14:49 #2
Hvis jeg ikk kender navnet på edit feltet, er det så muligt at finde frem til navnet? :)
Avatar billede driis Nybegynder
01. oktober 2005 - 14:53 #3
Ja, prøv at starte Spy++ op (ligger under Tools hvis du har Visual C++ eller Visual Studio .NET, ellers kan den sikkert downloades fra Microsoft), og find vinduet for det program du vil "skrive til". Her kan du se alle de undervinduer, programmet består af (i Win32 anses alle kontroller, som Edit felter, knapper, med mere, som vinduer). Du skal nu finde det edit felt du skal skrive til, og finde en måde entydigt at identificere det. Hvis navnet lader til at være unikt, kan du bruge det.
Avatar billede the_saint Nybegynder
01. oktober 2005 - 14:56 #4
Kanont ... Jeg prøver lige :)
Avatar billede the_saint Nybegynder
01. oktober 2005 - 15:30 #5
Fandt en program der hedder SysTree (Har ikke Visual C++)..
Med det program kan jeg finde mit vindue, og jeg kan se controllet..
Window: 000300EA "" Edit
Window: 0011011C "" ComboBox
Er de 2 komponenter jeg skal kunne skrive til.

En der kan lave en lille kode snip til mig? :)
Avatar billede driis Nybegynder
01. oktober 2005 - 19:24 #6
Jeg lavede dette eksempel, der skriver til notepad hvis den kører, og fandt ud af at du ikke kan bruge SetWindowText hvis vinduet tilhører en anden proces end din egen. Derfor sendes der en WM_SETTEXT message direkte:

#include <stdio.h>
#include <windows.h>

int main()
{
    const char * lptstrText = "Hello, notepad";
    HWND hwndEdit = NULL;
    HWND hwndNotepad = FindWindow("Notepad",NULL);
    if ( NULL != hwndNotepad )
    {
        hwndEdit = FindWindowEx(hwndNotepad,NULL,"EDIT",NULL);
        if ( NULL != hwndEdit )
        {
            if (SendMessage(hwndEdit,WM_SETTEXT,NULL,(LPARAM)lptstrText))
                printf("You should see some text in the notepad window");
            else
                printf("SetWindowText failed.");
        }
        else
        {
            printf("Could not find Notepad's Edit control");           
        }
    }
    else
    {
        printf("Notepad is not running.\n");
    }

    return 0;
}
Avatar billede the_saint Nybegynder
02. oktober 2005 - 13:08 #7
Okay, men kan jeg bruge de hex værdier til at finde mit vindue?
Avatar billede driis Nybegynder
02. oktober 2005 - 14:36 #8
Hex værdierne er handles til vinduerne, dem kan du ikke bruge i dit program, da de skifter fra gang til gang. Du skal bruge klassenavnet (class).

I mit eksempel ved jeg at Notepad har klassenavnet Notepad, og tekstfeltet har klassenavnet "EDIT", og jeg kan så finde det rigtige vindue på den måde.
Avatar billede the_saint Nybegynder
02. oktober 2005 - 15:13 #9
Jeg har fået den til at finde selve programmet, men ikke tekstfeltet.. Kan jeg på en måde finde ud af hvad tekstfeltet heddeR?
Avatar billede driis Nybegynder
02. oktober 2005 - 15:22 #10
Tja, du skal gå igennem træet af vinduer fra toppen af når du har fundet programmet, og finde det edit felt du skal bruge. Hvis der er flere Edit felter og SysTree ikke viser forskellige navne, etc., kan det blive svært. Evt. kan du bruge rækkefølgen de kommer i, men jeg ved ikke om Windows garanterer at de altid enumereres i samme rækkefølge.

Hvad er det for et program ?
Avatar billede the_saint Nybegynder
02. oktober 2005 - 15:28 #11
Det er en login screen til et spil : Dark Age of Camelot... Der er 1 Edit felt. og 2 ComboBoxe, jeg skal kunne skrive til det hele..
Bruge rækkefølgen de kommer i? hvordan ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester