Pobranie danej pola TEdit innej applikacji

0

Chce pobrać zawartość pola TEdit innego uruchomionego procesu.

Dokładniej problem dotyczy programu Emulator 8051 autorstwa Pana Macieja Trawka
jest tam pole tekstowe SP okna o nazwie Rejestry SFR chodzi mi o uchwycenie
przekroczenia wartości F8h w tej kontrolce i wtedy ma zostać wywołana
procedura w moim procesie pod Delphi.

Potrafię uzyskać Handle tej kontrolki ale nie wiem jak pozyskać wpisaną
do niej wartość? Jednak podstawowym problemem jest to ,że okno o nazwie
"SFR" jest oknem modalnym okna "Emulator 8051" i funkcja FindWindow()
nie potrafi odszukać jego uchwytu???

Oto moje dotychczasowe wypociny:


var
  Form1: TForm1;
  NazwaOkna:   string = 'SFR';
  UchwytOkna:  THandle;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
     if FindWindow(nil,PChar(NazwaOkna)) <> 0 then
     begin
          UchwytOkna:=0;
          UchwytOkna:=FindWindow(nil,PChar(NazwaOkna));
          if UchwytOkna <> 0 then
          begin
               Windows.Beep(300,300);

          end;
     end;
end;
0

No to jak masz już uchwyt do edita to dajesz
GetWindowText

0

Pana rozwiązanie nie działa zakładam ,że Handle z procesu "Emulator 8051" nie jest tym samym Handle w procesie "Project1" co zresztą jest napisanie
w opisie funkcji GetWindowText()


procedure TForm1.Button2Click(Sender: TObject);
var
bufor: array of string;
begin
     SetLength(bufor,255);

     if GetWindowText(329814,PChar(bufor),255) <> 0 then
     begin
          windows.Beep(300,300);
          Edit1.Text:=String(Bufor);
     end;
     SetLength(bufor,0);
end;
0

Pana rozwiązanie nie działa

To jest Pana (albo raczej: Twoje) rozwiązanie. Ja powiedziałem dobrze, ty źle zakodziłeś.

To ma mniejwięcej tak wyglądać:
1.Znajdujesz okienko aplikacji: FindWindow
2.Znajdujesz twój edit: Z tego co na MSDN znalazłem to to będzie EnumChildWindows
3.Odczytujesz tym co 'nie działa' zawartość tego edita.

Jak umiesz obchodzić się z WinApi to dasz radę.

0

Podczas enumeracji po kolejnych kontrolkach napotkałem nowy problem.... kontrolka TEdit, której szukam
nie ma nazwy i nie wiem jak ją oddzielić od reszty tego typu kontrolek.
Jednak dzięki za naprowadzenie mnie na podstawę problemu wyszukiwania.
Znalazłem takie proste i skuteczne rozwiązanie:
Zamieszczam... może będzie dla kogoś przydatne
Pozdrawiam..

Na wejściu podajemy Handle kontrolki jakiej tekst chcemy pobrać może pochodzić z naszego lub dowolnego innego procesu


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;
end;
0

@tester_68k: jeżeli kontrolka nie ma nazwy to można ja spróbować odszukać po rozmiarach, po kolejności wystapienia w procedurze enumeracji kontrolek lub po nazwie klasy. Czasami jeżeli to możłiwe, a na ogół z wykorzystaniem modułu afxcodehook.pas dla aplikacji z oknem i nie będącymi systemowymi procesami - jest to możłiwe - można wszczepić dllkę z własnym kodem w obcy proces, daje to lepszą kontrolę nad nim i nowe możliwości. Jako ciekawostkę dołączam kody dwóch programów napisanych przeze mnie w WinAPI z użyciem wspomnianego modułu. Archiwum calc_control_v2.rar zawiera program kontrolujący i przechwytujący zachowanie kalkulatorów z XP 32 bit oraz Windows 7 64 bit (oba są dołączone). Nie jest on doskonały, bo nie mam czasu na dalszą zabawę i dokłądnie nie przeanalizowałem wychwytywania obsługi klawiszy oraz WM_CHAR słane nawet do okna i tak nie przechwyciłem, a to dodaje na przykład nowe cyfry. Ale powinieneś na bazie tego kodu zrozumieć ideę. Natomiast archiwum spy_notepad_keys.rar zawiera prosty program przechwytujący klawisze wciskane w standardowym Notatniku dla Windowsa. Być może te kody wraz z exekami przydadzą się Tobie lub pozostałym (nie dotyczy marudnego użytkownika o nazwie tomriddle, któremu nie wolno pobierać moich kodów źródlowych, bo są do nich dla wygody przetestowania bez kompilacji dołaczone również skompilowane exeki, a to mu z nieznanych nikomu powodów - w tym pewnie jemu samemu - przeszkadza).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0