22. oktober 2002 - 21:54Der 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.
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.
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 ?
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?
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*
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*
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!
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*
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.
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.
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.