Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 21:19 Der er 20 kommentarer og
2 løsninger

Hente indhold af tekstfelt fra andet delphi program

Hey!

Jeg har et stort problem, som jeg MEGET gerne vil have løst.

Jeg har et program kørende, som er lavet i delphi. Det er ikke mig der har lavet, og har derfor ikke adgang til sourcen. Det program er meget simpelt. Det består af 2 knapper og 1 tekstfelt eller noget.
Tekstfeltet indeholder noget tekst som konstant bliver opdateret. Desværre laver programmet ikke selv en log til en tekst fil.

Det er den teks jeg gerne vil tilgå via det delphi program, som jeg håber en af jer kan komme med foreslag til.
Jeg har søgt lidt rundt på nettet, men har ikke kunne finde noget der kunne bruges.
Et eller andet med findWindow og så køre windows elementerne igennem .. eller noget.


på forhånd tak!
Avatar billede dkn Nybegynder
24. oktober 2002 - 21:51 #1
det program med det edit felt, er det noget du kan sende, så kan jeg hurtigt fixe koden for dig.?
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 21:55 #2
programmet som der skal læses fra, kan som sagt ikke redigeres. Det er en del at et støre program. Så jeg ved ikke helt hvordan.
Avatar billede dkn Nybegynder
24. oktober 2002 - 21:56 #3
det er bare fordi det ville være rart at vide det edit fel hedder
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 21:59 #4
det tror jeg ikke man kan finde ud af.. hmm

den for den sags skyld også godt køre alle elementer igennem og tage indholdet af dem. Sådan at man også får alt det andet med.
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 22:00 #5
okay.. det jeg mente med det sidste var, at det er lige meget hvor meget af det andet der kommer med. Indhold af diverse andre felter osv.
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 22:08 #6
dette er hvad jeg umidlbart kan finde ud af om det felt:
Class: TMemo      hWnd: 1050556

hvis det hjælper noget...
Avatar billede dkn Nybegynder
24. oktober 2002 - 22:13 #7
dette finder den første edit:

procedure TForm1.Button1Click(Sender: TObject);
var
  mainhandle, subhandle: thandle;
  buf: array[0..256] of char;
begin
  mainhandle := findwindow(nil, 'Test Form');

  if mainhandle = 0 then
  begin
    showmessage('no window');
    exit;
  end;

  subhandle := FindWindowEx(mainhandle, 0, 'TEdit', nil);
  Getwindowtext(subhandle, buf, sizeof(buf) - 1);

  edit1.Text := strpas(buf);
end;


Det du skal er så at kende navnet på det edit felt du ønsker, medmindre den er når 1 fundet
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 22:13 #8
Jeg har fundet ud af det.

ved hjælp af følgende kode:

Function GetText(WindowHandle: hwnd):string;
var
txtLength : integer;
buffer: string;
begin
TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
txtlength := txtlength + 1;
setlength (buffer, txtlength);
sendmessage (WindowHandle,wm_gettext, txtlength, longint(@buffer[1]));
result := buffer;
showmessage(result);
end;

function GetURL:string;
var
ie,toolbar,combo,
comboboxex,edit,
worker,toolbarwindow:hwnd;
begin
  ie := FindWindow(pchar('IEFrame'),nil);
  worker := FindWindowEx(ie,0,'WorkerA',nil);
  toolbar := FindWindowEx(worker,0,'rebarwindow32',nil);
  comboboxex := FindWindowEx(toolbar, 0, 'comboboxex32', nil);
  combo := FindWindowEx(comboboxex,0,'ComboBox',nil);
  edit := FindWindowEx(combo,0,'Edit',nil);
  toolbarwindow := FindWindowEx(comboboxex, 0, 'toolbarwindow32', nil);

  result := GetText(edit);
Avatar billede gizmo-gizmo Nybegynder
24. oktober 2002 - 22:14 #9
Det er vist samme princip.

skal dog siges at den sidste funktion ikke skal bruges.


du får nogle points som tak for hjælpen.
Avatar billede dkn Nybegynder
24. oktober 2002 - 22:17 #10
Mange tak!
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 12:43 #11
dkn >> Jeg var vist lidt for hurtig med løsningen. Den løsning jeg brugte SKAL man kende hWnd, som fx. 1050556. Men jeg var ikke klar over, at den skiftede hver gang man startede progrmamet på ny.

Jeg har desværre heller ikke haft held med din metode.

jeg kan fint finde vinduet med FindWindow(nil, 'navn')  .. men at hente værdien fra et felt/memo fra et andet program, kan jeg simpelthen ikke få til at virke.

Har du nogen ide til hvad der i vejen? hvordan det kan løses? eller noget :)
Avatar billede dkn Nybegynder
26. oktober 2002 - 15:41 #12
Det her tager teksten fra den første edit:


procedure TForm1.Button1Click(Sender: TObject);
var
  txtLength: integer;
  buffer: string;
  mainhandle, subhandle: thandle;
begin
{Ok jeg har lavet en edit i et andet program. Editen hedder "Edit1"
Formen den er på har caption "Testform"}

  mainhandle := findwindow(nil, 'Testform');

  if mainhandle = 0 then
  begin
    showmessage('no window');
    exit;
  end;

  subhandle := FindWindowEx(mainhandle, 0, 'TEdit', nil);
  TxtLength := SendMessage(subhandle, WM_GETTEXTLENGTH, 0, 0);
  txtlength := txtlength + 1;
  setlength(buffer, txtlength);
  sendmessage(subhandle, wm_gettext, txtlength, longint(@buffer[1]));

  edit1.Text := buffer;
end;
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 15:52 #13
dkn >> Takker. Jeg laved en test med mine egne programmer, og det virkede.  (TMemo og TEdit)

Men det program jeg rippe hente det fra virker ikke :-/ Det er der ikke noget at gøre ved så.
Avatar billede dkn Nybegynder
26. oktober 2002 - 16:12 #14
ok men hvis du kunne komme til at sende den exe fil til mig så skulle det altså være muligt
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 16:16 #15
dkn >> Jeg er meget glad for, at du prøver at hjælpe.

Ved ikke om du er ligeglad, men du skal nok få  en del points mere hvis det kommer til at virke.

Programmet er et lille spil på 5 mb (freeware). Så hvis du gider kan du downloade det fra:

http://home.t-online.de/home/Heiko2323/soldat105b.rar

hvis du prøver det, så er det dedicated du skal gå ind i, og trykke start. Så kommer der et lille vindue med noget tekst i midten
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 16:28 #16
hvis den side går langsom, så prøv..
http://soldat.cyberion.pl/download.htm
Avatar billede dkn Nybegynder
26. oktober 2002 - 16:35 #17
har skam hentet det. Hvad er det så for een du skal læse fra?
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 16:45 #18
Det er feltet i midten. Et stort felt. Det bliver opdateret stort set hele tiden.

Det er efter "dedicated" er startet. Ved ikke om du er kommet så langt.
Avatar billede dkn Nybegynder
26. oktober 2002 - 16:47 #19
nåe den, vil lige se på det så...
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 16:52 #20
tusind tak.
Avatar billede dkn Nybegynder
26. oktober 2002 - 16:55 #21
procedure TForm1.Button1Click(Sender: TObject);
var
  txtLength: integer;
  buffer: string;
  mainhandle, subhandle, sub2: thandle;
begin
  mainhandle := findwindow(nil, 'Soldat');
  sub2 := FindWindowEx(mainhandle, 0, 'TFlatPanel', nil);
  subhandle := FindWindowEx(sub2, 0, 'TMemo', nil);
  TxtLength := SendMessage(subhandle, WM_GETTEXTLENGTH, 0, 0);
  txtlength := txtlength + 1;
  setlength(buffer, txtlength);
  sendmessage(subhandle, wm_gettext, txtlength, longint(@buffer[1]));

  memo1.Text := buffer;
end;
Avatar billede gizmo-gizmo Nybegynder
26. oktober 2002 - 17:04 #22
LÆKKERT...

det virker 100%! du skal have mange tak.


lidt points her:
http://www.eksperten.dk/spm/275475
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer

KMD A/S

Projektleder