[ bancika @ 04.01.2005. 20:02 ] @
Pitanje je sledece: da li je moguce pauzirati neku aplikaciju u toku izvrsenja i nakon odredjene akcije nastaviti sa njenim izvrsenjem.
Druga stvar: da li je moguce spreciti izvrsenje nekog programa i/ili dobiti poruku da je pokrenut.

Thanx
[ Srki_82 @ 04.01.2005. 23:53 ] @
Odgovor na prvo pitanje: Mozes iskoristiti GetWindowThreadProcessId sto ce ti vratiti thread koji je kreirao prozor i zatim pozoves SuspendThread i zaustavis ga. Kada posle hoces ponovo da ga pokrenes pozoves ResumeThread.

Odgovor na drugo pitanje: Znam da mozes da dobijes obavestenje kad god se nov prozor kreira. Postavis WinHook i trazis SHELL obavestenja. Izmedju ostalih dobijaces i poruku kada se nov prozor kreira (ne znam da li ce ti to pomoci ako planoras da zaustavljas servise jer mislim da oni ne kreiraju prozore) i onda mozes da nadjes putanju exe fajla, naziv i klasu prozora... pa da ga ili zatvoris, pauziras ili pustis da radi dalje.


[ bancika @ 05.01.2005. 22:12 ] @
za drugo:
oket, provalio sam kako da dobijem handle novog prozora...kako da ga iskoristim da dobijem putanju i da pauziram?
[ Srki_82 @ 06.01.2005. 17:41 ] @
Nadam se da ce ti pomoci ovaj programcic koji sam napravio. Otprilike tako mozes da pronadjes informacije o svim procesima, modulima i threadovima. Pogledaj malo help u Delphi-u za Tool Help funkcije.
Kada imas handle prozora koji hoces da pauziras uzmes id threda koji ga je kreirao ThreadID := GetWindowThreadProcessId(WindowHandle) i onda pozoves SuspendThread(ThreadID), a kad hoces da ga nastavis pozoves ResumeThread(ThreadID). Ako hoces da ubijes neki proces pozovi TerminateProcess funkciju. Nije bas pametno da to radis jer svi DLL-ovi koje je taj proces ucitao se ne brisu iz memorije. Ovo mozes da zaobidjes tako sto pokupis sve module (DLL-ove) koje je taj proces ucitao i onda pozoves FreeLibrary za svaki modul. Laksi nacin je da pokusas da posaljes WM_QUIT poruku prozoru koji hoces da ugasis, ali da bi taj prozor procitao poruku njegov thread ne sme biti pauziran. Eto... tako nekako.
Sta to pravis ako nije tajna? Neki spyware killer ili antivirus?


[ bancika @ 07.01.2005. 01:50 ] @
hvala puno!
to sto pravim je nesto kao da zastitis neke programe passwordom i onda kad se pokrene zasticeni exe da ga moj program pauzira, promptuje password i onda ili razblokira ili zatvori u zavisnosti od pw-a ;)
[ Srki_82 @ 07.01.2005. 02:16 ] @
Radis vrlo zanimljive programcice... i ja sam radio takve stvari, ali na Win 3.1. Sad me nekako vise vuce da pravim igre (sad me nesto vuce da napravim jednu MAXIMALNO GLUUUUUUUUUPU masiv multiplejer gejm :P Bice nesto kao platforme razbacane po prostoru i cilj ti je da se penjes sto vise. Oko tebe skakuce jos njih ko zna koliko... vidis nekog viiiiisooooooookoooooooooo i nemas pojma kako je do tamo stigao... i tako :P) :)
Sajt ti je odlican... svaka ti cast ako si sam pravio sve te programcice :)


[ reiser @ 07.01.2005. 03:32 ] @
@bancika
A sto ne bi enkriptovao fajl koji zelis da zasititis pa na njegov pocetak zapises jedno malo programce koje ce ti promptati password i koristita ga za dekriptovanje fajla ? Tako tvoj program koji ce raditi monitoring procesa ne mora da bude uvek aktivan + zastita je skoro neprobojna ako koristis neki bolji cipher & hasher ili kombinaciju dva ili vise...
[ bancika @ 07.01.2005. 10:19 ] @
@srki: tnx za programe. sam sa^m ih radio, a sajt je preradjeni template :)
postuj igricu kad bude u igrivoj fazi.

@marko: palo mi je na pamet, ali nekako ne volim da ih modifikujem. to je deo malo veceg parental control programcica. ne verujem da ce deca da provale to...mada, ko zna, napredne generacije :)
[ bancika @ 08.01.2005. 10:26 ] @
jos samo nesto: kad imam handle prozora, kako da dobijem caption forme (tj title)?
[ Srki_82 @ 08.01.2005. 12:09 ] @
Code:
procedure GetWindowCaption(W:HWND): String;
var B: array[0..255] of Char;
begin
  SetString(Result, B, GetWindowText(W, B, SizeOf(B));
end;
Pisao sam napamet pa mozda ima neka greska, ali tako bi nekako odprilike trebalo da ide.


[ bancika @ 08.01.2005. 13:18 ] @
radi ok, hvala puno. zaboravio sam jednu sitnicu: kako dobiti ime exe-a ako imam handle?
Hvala unapred i sorry na cimanju
[ Srki_82 @ 08.01.2005. 13:48 ] @
Imas onaj program koji ti prikazuje sve procese i njihove podatke (izmedju ostalog i ime exe fajla). Kad imas handle prozora GetWindowThreadProcessId ti vrati koji proces je kreirao prozor i u listi svih procesa samo pronadjes taj koji ti treba i imas sve njegove podatke. Nadam se da sam dovoljno jasno objasnio :)


[ bancika @ 08.01.2005. 14:34 ] @
oket, provalio sam. sa GetWindowThreadProcessId(wHandle, @idProc) nadjem id procesa i onda uporedjujem. hvala :)
[ Srki_82 @ 08.01.2005. 15:35 ] @
GetWindowThreadProcessId(wHandle, idProc)
Ne treba ti pointer na idProc u Delphi-u ;)


[ bancika @ 08.01.2005. 15:41 ] @
vazno radi
[ bancika @ 12.01.2005. 23:26 ] @
srki pomagaj :)
Suspend/Resume Thread ne mogu tek tako da se koriste. Trebam da imam prava (THREAD_SUSPEND_RESUME i slicna). Jel znas kako to da se uradi?
[ reiser @ 12.01.2005. 23:36 ] @
Probaj sa ovim :

Code:

procedure GetDebugPrivs;
var
  hToken : THandle;
  tkp    : TTokenPrivileges;
  retval : DWORD;
begin
  If OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) Then
  Begin
    LookupPrivilegeValue(nil, 'SeDebugPrivilege' tkp.Privileges[0].Luid);
    tkp.PrivilegeCount := 1;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, tkp, 0, nil, retval);
  End;
end;
[ bancika @ 13.01.2005. 00:17 ] @
jock, i dalje suspendThread nema efekta...hvala u svakom sl.
jel ima neko ideju?