Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

FindWindowEx i upisivanje vrednosti uz pomoc SendMessage

  • 6 odgovora
  • 3.301 pregleda

Najnovija ↓

FindWindowEx i upisivanje vrednosti uz pomoc SendMessage 20.10.2008. u 21:36 · pre 219 meseci #1
Dakle uspeo sam da dobijem handle nekog programa, recimo notepada, preko PID-a. Sad hocu da u taj notepad upisem neki text. Koristeci WinDowse zakljucio sam da se klasa u koju se upisuje text u notepad zove "Edit". Znaci to treba ovako nekako da izgleda:

var
handle, handle2: THandle;
begin
//dodeljivanje PIDa
Handle:=OpenProcess(PROCESS_ALL_ACCESS, BOOL(0),pid);
handle2:=FindWindowEx(handle,0,pchar('Edit'),nil);
SendMessage(handle2,WM_SETTEXT,sizeof(str1),integer(str1));
//zatvaranje handle-a
end;

Medjutim, ovo ne radi. U cemu bi mogao da bude problem?
Re: FindWindowEx i upisivanje vrednosti uz pomoc SendMessage 21.10.2008. u 15:21 · pre 219 meseci #2
Citat:
krza:
Code:

var
handle, handle2: THandle;
begin
//dodeljivanje PIDa
Handle:=OpenProcess(PROCESS_ALL_ACCESS, BOOL(0),pid);
handle2:=FindWindowEx(handle,0,pchar('Edit'),nil);
SendMessage(handle2,WM_SETTEXT,sizeof(str1),integer(str1));
//zatvaranje handle-a
end;


Medjutim, ovo ne radi. U cemu bi mogao da bude problem?


Ti nigde ne proveravas sta ti vracaju API funkcije. Kako znas da je OpenProcess uspeo? Kako znas da je FindWindowEx nasao handle itd.

Druga stvar su standardne windows klase. Nije Edit vec EDIT. Dakle nesto kao ovako:

Code:

var
handle, handle2: THandle;
begin
//dodeljivanje PIDa
handle:=OpenProcess(PROCESS_ALL_ACCESS, BOOL(0),pid);
if handle <> nil then begin
  handle2:=FindWindowEx(handle,0,pchar('EDIT'),nil);
  if  handle2 <> nil then begin
    SendMessage(handle2,WM_SETTEXT,sizeof(str1),integer(str1));
  end;
  //zatvaranje handle-a
end;

end;


Informisi se o standardnim klasama

http://msdn.microsoft.com/en-us/library/ms632679(VS.85).aspx
Potpis
Tko leti vrijedi
Re: FindWindowEx i upisivanje vrednosti uz pomoc SendMessage 21.10.2008. u 18:09 · pre 219 meseci #3
ne mogu da koristim handle <> nil jer je THandle: Longword, tako da bi onda ako vec hocu da uporedjujem bilo handle <> 0 mada sam hteo samo primer da dam. Ali bez obzira na to kod ne radi. Verujem da je problem ili u FindWindowEx ili u SendMessage jer sam koristio TerminateProcess() za handle i radilo je.

update:
Problem je u FindWindowEx jer vraca vrednost 0...
Re: FindWindowEx i upisivanje vrednosti uz pomoc SendMessage 21.10.2008. u 19:51 · pre 219 meseci
izmenjeno 1 put, poslednji put X Files 21.10.2008. u 21:05
  1. X Files21.10.2008. u 21:05zapis iz teksta poruke
#4
Pogledaj par ovih threadova:

/* uklonjeni neispravni linkovi */

... ili bas insistiras na OpenProcess i FindWindowEx ?
Re: FindWindowEx i upisivanje vrednosti uz pomoc SendMessage 22.10.2008. u 09:42 · pre 219 meseci #7
Za početak kao što bi rekao naš nekadašnji Ministar inostranih poslova, you can't mix grandmothers and frogs ;)
FindWindowEx za prvi parametar očekuje HWND parent prozora ne Handle procesa u kome se prozor nalazi.
Do handla željenog prozora možeš doći iz nekoliko koraka:
1) Treba dobiti HWND parent prozora, ako je to top-level window (ili neki njegov predak jeste) onda se to lako radi pomoću EnumWindows i upoređivanjem rezultata funkcije GetWindowThreadProcessId i procesa koji ti već imaš. Ako nije TopLevel onda se mora ići okolnim putem, prvo se nađu svi thredovi datog procesa a onda se gledaju svi prozori tih threadova preko EnumThreadWindows dok se ne dođe do parenta.
2) Pozoveš EnumChildWindows za dobijeni HWND dok ne pronađeš željeni handle.

Možda postoji i lakši način, zavisno od organizacije (hijerarhije) prozora u tom programu, ali bez detaljnijih informacija ne može se reći. Primere upotrebe svih gore navedenih funkcija možeš naći u JCL biblioteci ili MSNDu.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme