Avatar billede gizmo-gizmo Nybegynder
22. oktober 2002 - 21:54 Der er 18 kommentarer og
2 løsninger

Hente indhold fra et andet program

Hej..

Jeg ved ikke om det er det rigtig sted at spørge, men jeg prøver alligevel :-)


Jeg mangler en metode, til at hente en værdi fra et andet program..

Det foregår på den måde, at det ene program køre. Programmet er egentlig meget simpelt. ét stort felt og et par knapper. Det er teksten fra det store felt jeg vil have fat i.

Er det lige til at gøre i C/C++ ?

det pga. programmet ikke skrive en log, men det kun står inde i det lille vindue. Så derfor mangler jeg et program, som kan opsnappe den tekst.
Avatar billede gizmo-gizmo Nybegynder
22. oktober 2002 - 22:14 #1
programmet er lavet i delphi, så måske det ville være nemmere at spørge derovre i den kategori?
Avatar billede cms Nybegynder
22. oktober 2002 - 23:40 #2
char * GetValueFromDelphiProgram(char *ProgramCaption, char *DelphiClass, int WindowNumber)
{
    HWND hForm = FindWindow(NULL, ProgramCaption);
    HWND hChild = FindWindowEx(hForm, NULL, DelphiClass, NULL);

    for (int i=1; i<WindowNumber; i++)   
      hChild = FindWindowEx(hForm, hChild, DelphiClass, NULL);

    if (!hChild)
      return NULL;

    int TextLen = GetWindowTextLength(hChild);
    char* Text = (char*) malloc(TextLen+1);
    GetWindowText(hChild, Text, TextLen+1);
    return Text;
}

void GetValue(){
    char* Text = GetValueFromDelphiProgram("DelphiProgram", "TEdit", 1);
    MessageBox(0, Text, "Tekst fra Delphi-program", 0);
    free(Text);
}

WindowNumber sættes til 5 hvis du vil have den femte TEdit-kontrol på DelphiProgram-formen. Bemærk at "DelphiProgram" skal udskiftes med _formens_ caption, ikke applicationsens caption.
Avatar billede soepro Nybegynder
23. oktober 2002 - 14:17 #3
cms >> Hvad laver d.o. ? Hugger teksten fra kontrol nr. X i et andet kørende program ? Hvis vi nu tænker os at programmet var Internet Explorer, ville man så vha. d.o. (hvis man ellers kender navnet på den anvendte kontrol) kunne nappe URL'en ovenfor ?
Avatar billede cms Nybegynder
23. oktober 2002 - 16:49 #4
Jeps :) Det kan jeg vist godt lave til dig :D Men der findes iøvrigt API fra MS til at grabbe urls fra åbne IE'er.
Avatar billede gizmo-gizmo Nybegynder
23. oktober 2002 - 16:57 #5
cms >> inden jeg prøver det af, så vil jeg lige være sikker på, at det er det rigtige du foreslår...

Henter dit program, via et delphi, værdier fra et andet delphi program?

skal lige siges at at det program der skal "rippes" ikke er mig de har lavet det... men det er i delphi.

Det jeg skal ændre, er det det program der ripper's caption, eller det program der skal rippes?
Avatar billede smokes Nybegynder
23. oktober 2002 - 17:08 #6
Cms: jeg blev også interesseret *s*.. men er du sikker på det virker lige i hans tilfælde.. om GetWindowText står der i win32 dokumentationen:
This function cannot retrieve the text of an edit control in another application.

under remarks.. er hans "felt" ikke en edit control?
Avatar billede smokes Nybegynder
23. oktober 2002 - 17:18 #7
cms:
Jeg tror det virker hvis man skaffer handlet som du har vist og derefter bruger GetDlgItemText() til at få fat i teksten.. er dog ikke nogen api haj *g*
Avatar billede cms Nybegynder
23. oktober 2002 - 17:31 #8
smokes> Det er noget vrøvl. Det har jeg lige gjort på min comp.
Men man kan da sikkert også bruge GetDlgItemText.
Avatar billede cms Nybegynder
23. oktober 2002 - 17:31 #9
Sikken interesse :) Og så er det mit første c++-program :D
Avatar billede gizmo-gizmo Nybegynder
23. oktober 2002 - 17:34 #10
cms >> vil lige prøve det engang idag... skal lige have fat i en compiler :)
Avatar billede smokes Nybegynder
23. oktober 2002 - 19:22 #11
cms: rolig nu.. det er ikke mig som har skrevet api dokumentationen.. det er microsofts bord og jeg citerede hvad der stod.. hvis du kan alligevel har de jo bare skrevet forkert.. men hvis du læser api dok'en virker det meget logisk.. alle komponenter i windows er et window.. GetWindowText() henter vinduets titel eller caption i c++ builder sprog.. men anyway.. prøv selv at slå kaldet op i MS SDK reference.. mærkeligt hvis de har skrevet forkert *s*
Avatar billede cms Nybegynder
23. oktober 2002 - 22:20 #12
Jamen jeg har nu leget med API'et mange gange, og GetWindowText giver dig altså indholdet af en Edit. Jeg tror problemet ligger i at GetWindowText ikke er garanteret crossprocess virkning. Brug SendMessage(hWnd, WM_GETTEXT, ...) hvis du vil være sikker!
Avatar billede smokes Nybegynder
23. oktober 2002 - 23:10 #13
cms: jeg tror selvfølgelig på dig hvis du siger.. kan ligesom heller ikke tillade mig andet når jeg ikke har testet det selv *s*.. blev bare overrasket over at microsoft så skriver udtrykkeligt at det kan man ikke med funktionen *s*
Avatar billede cms Nybegynder
23. oktober 2002 - 23:14 #14
Sorry min grynten :D Ja jeg overraskes også.. men det er nok fordi funktionen ikke garanteres at virke på tværs af processer og threads - præcis som MS skriver om DestroyWindow.
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 19:32 #15
cms >> kan du komme med den fulde sovs til programmet? jeg har ikke forstand på C++ :-/
Avatar billede cms Nybegynder
24. oktober 2002 - 19:38 #16
Hvorfor pokker bad du mig så ikke om at lave det i Delphi?? Skørt..
Anyways.. here it is:
http://e.dyndns.dk/FindWindow.rar
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 20:07 #17
cms >> linket virker ikke mere :-/
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 20:09 #18
cms >> ja, skulle nok have spurgt efter et delphi program. Havde nok været nemmere.
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 20:35 #19
cms >> du får nogle points som tak for hjælpen. Jeg kunne ikke helt få det til at virke optimalt. Jeg prøver at spørge i delphi kategorien, da jeg tro det vil være nemmere at frembringe en løsning der.
Avatar billede cms Nybegynder
25. oktober 2002 - 15:10 #20
Tak for points :) Hvad er det som ikke virker?
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