Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem DELPHI - komunikace s jinou aplikací

Žádné fórum o Deplhi (česky) jsem nenašel. Všechny odkazy vedou už na neexistující servery, tak proto Vás tu zde musim otravovat.

Chtěl bych pouze radu, žádný výsledný kód. Můj bratr tráví hraním poč. her hodně času a já jsem dostal od otce za úkol, abych udělal program, který bude zasnamenávat, jak dlouho daná aplikace běží. A jakmile dosáhne hodnoty 2 hodiny, aplikaci ukončí. Vím přibližně, jak na to. Jediné co nevim, jejak zjistit, jestli daná aplikace běží (např wow.exe), a pak, jak ji ukončit. Podotýkám, že jediné, co umím je pascal a delphi, ale na žádné profesionální úrovni.

Děkuji za rady.

Předmět Autor Datum
Nevim jestli Delphi zapouzdřují funkce pro práci s procesy, každopádně GetProcessTimes vrací čas, po… nový
Mitch 08.04.2008 22:40
Mitch
He he. Jenom tak mimochodem. Ta aplikace bude muset obsahovat také něco jako kalendář, jestli tedy b… nový
Flash_Gordon 08.04.2008 23:38
Flash_Gordon
Jestli je dost vychytralej, tak si tu aplikaci přejmenuje:-) Ale jestli má svůj omezenej účet tak si… nový
Mitch 08.04.2008 23:46
Mitch
Ke hrám je obvykle třeba admin účet, takže se s podobnou aplikací lze vždy nějak vypořádat. Asi bych… nový
jbo 09.04.2008 10:35
jbo
Ke hrám obvykle NENÍ třeba admin účet.. :i:;-) nový
touchwood 09.04.2008 14:21
touchwood
Vyprávěj to vypatlaným programátorům her... Na druhou stranu většinou není nemožné nastavit práva v… nový
Vladimir 09.04.2008 14:24
Vladimir
mate tu dve ceska fora: builder.cz resp forum.builder.cz a programujte.com nový
programator 09.04.2008 10:50
programator
To druhé je obzvláště zajímavé, mohlo by se jmenovat www.domaciukoly.com. :)) nový
MaSo 09.04.2008 10:54
MaSo
asi preklep, urcite jste myslel to prvni :puff: nový
programator 09.04.2008 12:47
programator
Delphi tyto informace ziska pomoci API fuhkci operacniho systemu. Pokud chces detekovat start aplika… nový
Jan Fiala 09.04.2008 12:23
Jan Fiala
Úplně nejjednodušší cesta je asi udělat zástupce na proces(=program), který spustí tu hru a pak ji t… nový
Flash_Gordon 09.04.2008 13:31
Flash_Gordon
Mnohem jednodussi cesta je pravidelne kontrolovat seznam bezicich procesu a zaznamenavat procesy spu… nový
Vladimir 09.04.2008 13:39
Vladimir
A jak tu aplikaci při dosažení 2 hodin schodí? nový
Mitch 09.04.2008 14:05
Mitch
nijak tuhle část zadání jsem nečetl :) ale možná by to šlo přes alerty v performance monitoru, je t… nový
Vladimir 09.04.2008 14:21
Vladimir
no....jednoduše.. VBS skriptem :-) nový
touchwood 09.04.2008 14:34
touchwood
Když už se bude psát skript, tak nemusí používat Performance monitor ale čas kontrolovat přes WMI:-)… nový
Mitch 09.04.2008 15:06
Mitch
nj já jsem naučenej na starých NTčkách, kde se žádné WMI nekonalo a holt si postupy přenáším na nově… nový
Vladimir 09.04.2008 15:26
Vladimir
Jo tak já v době NT jel na Win95 (mi ještě teklo mlíko po bradě) a jedinej postup kterej se dal z to… nový
Mitch 09.04.2008 15:44
Mitch
my měli Windows NT v provozu ještě v roce 2003 :) WSH se dal doinstalovat, ale do systému se WMI sam… nový
Vladimir 09.04.2008 15:53
Vladimir
No když to funguje, tak proč na to šahat:-) Pro NT4 jsem našel instalaci WMI ale bude to nějaká okl… nový
Mitch 09.04.2008 16:03
Mitch
Všem moc děkuji za rady. Chci jen upřesnit pár věcí. Bratr má sice admin účet (protože se přihlašuje… nový
teh 09.04.2008 15:16
teh
Otevři si v Delphi nápovědu a hledej GetProcessTimes a TerminateProcess. Měly by tam být i příklady… nový
Mitch 09.04.2008 15:27
Mitch
Zdarec, Jednoduchší to určitě je... Co tak mu zpřístupnit jeden účet (na hraní her,když třeba není n… poslední
BinTrix 15.05.2008 17:17
BinTrix
procedure KillProcess(hWindowHandle: HWND); var hprocessID: INTEGER; processHandle: THandle; DWResul… nový
teh 09.04.2008 16:11
teh
IMHO ty získáváš handle z názvu okna. Lepší by bylo získavat handle procesu z názvu souboru. nový
Mitch 09.04.2008 16:19
Mitch
a to je která řádka? nový
teh 09.04.2008 16:30
teh
Zkus article.php , sice jsem to nečetl celý ale mělo by to pomoct. nový
Mitch 09.04.2008 16:31
Mitch
nefunguje to :-( a je to i v diskuzi pod tím, že to funguje jen někomu a někomu ne nový
teh 09.04.2008 16:53
teh
oprava, zapoměn ljsem u druhého tlačítka nadefinovat funkci .. u prvního jsem to udělal a na to druh… nový
teh 09.04.2008 16:57
teh
děkuji všem za rady. zbytek už zvládnu :) nový
teh 09.04.2008 17:28
teh

He he. Jenom tak mimochodem. Ta aplikace bude muset obsahovat také něco jako kalendář, jestli tedy bratr není "dostatečně hloupí".
Protože první co bych zkusil např. já by bylo natáhnout si budíka na 1:50 minut a pak Wow ukončit a opět spustit, to by mohlo vést (u omezovače bez kalendáře) k tomu, že by se čas začal počítat znova.

A taky počítám, že bratr nebude mít adminovský učet, protože jinak by taky mohl ten tvůj proces prostě "sestřelit" a měl by pokoj :-D .

Nejjednodušší by asi bylo udělat jednoduchou EXE aplikaci tvoji, na kterou by dostal bratr zástupce a ten by interně spouštěl program "WOW.exe" a zároveň před spuštěním by si někam zapsal datum aktuálního dne v měsíci a po navoleném čase by proces "sestřelil", při dalším spuštění by nejprve kontrolovat aktuální den v měsíci a pokud by byl stejný, tak by to nespustil. Samozřejmě by se mohl objevovat nějaký "drsný" dialog.

Ke hrám je obvykle třeba admin účet, takže se s podobnou aplikací lze vždy nějak vypořádat. Asi bych to spíše řešil na nějaké mezilidské bázi, popř. hardwareově (tzn. vypnout PC). Restrikce ale obvykle k ničemu nevedou. Osobně vidím hraní na PC jako lepší náplň času než běhání s partou holých lebek, fetování atd.

Delphi tyto informace ziska pomoci API fuhkci operacniho systemu. Pokud chces detekovat start aplikaci, musel bys udelat tzv. system hook - napsat DLL knihovnu a zaregistrovat ji v systemu. Pak dostanes info pri spusteni / ukonceni aplikace.
Mnohem jednodussi cesta je pravidelne kontrolovat seznam bezicich procesu a zaznamenavat procesy spustene uzivatelem.

Úplně nejjednodušší cesta je asi udělat zástupce na proces(=program), který spustí tu hru a pak ji také (případně) ukončí.
Fungovat to může samozřejmě jen za předpokladu, že brácha nebude mít administrátorský účet a nebude moci např. spouštět tu hru "přímo" či dokonce přejmenovávat soubory té hry.

Mnohem jednodussi cesta je pravidelne kontrolovat seznam bezicich procesu a zaznamenavat procesy spustene uzivatelem.

což jde dělat v perfomance monitoru ve Windows a logovat to do csv a pak nad tím udělat pivot v excelu. A není potřeba psát žádnou aplikaci :)

Všem moc děkuji za rady. Chci jen upřesnit pár věcí.
Bratr má sice admin účet (protože se přihlašuje na otcův), ale je mu 12 a pc moc neumí. Takže si nic takového vypínat nebude. A kdyby ano, tak mu udělám guesta.

Druhá věc je ta, že on na pc může hrát. Ale má povoleno 2-4 hod. A když třeba není nikdo doma, tak hraje, a když příjde otec, tak řekne, že to teďka zapnul.

A třetí věc je ta, že fakt nejsem žádnej profík, takže to, co mi tu radíte sice chápu, ale nevím, kde to najdu, ani jak to udělat ... :-(

Myslel jsem, že to bude poněkud jednodušší.

Zdarec,
Jednoduchší to určitě je...
Co tak mu zpřístupnit jeden účet (na hraní her,když třeba není nikdo doma) a do složky "po spuštění"(případně registry) hodit *.bat s SHUTDOWN -s -f -t 7200 -c "Stačilo parch....!".
To jen tak v rychlosti co mě teď napadlo,ale možností je určitě kopa...
zdarec.

procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);
  if isWindow(hWindowHandle) then
  begin
    GetWindowThreadProcessID(hWindowHandle, @hprocessID);
    if hprocessID <> 0 then
    begin
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID);
      if processHandle <> 0 then
      begin
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

procedure Twow_killer.FormCreate(Sender: TObject);
begin
  while(1 = 1) do begin
    delay(3000);
    KillProcess(FindWindow('Notepad',nil));
  end;
end;

tohle jsem na netu našel a trochu upravil... vypíná to proces, který se zadá .. notepad to vypíná v pohodě, ale wow.exe to prostě nevypne .. explorer.exe taky ne, ale třeba xfire.exe ano .. nevítě někdo proč to nejde?
(jinak až to bude fungovat, tak teprve začnu dělat to, že to bude počítat čas a ukládat datum + čas do souboru a vypínat potom)
díky

Zpět do poradny Odpovědět na původní otázku Nahoru