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…
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…
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…
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…
jbo 09.04.2008 10:35
jbo
Ke hrám obvykle NENÍ třeba admin účet.. :i:;-)
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…
Vladimir 09.04.2008 14:24
Vladimir
mate tu dve ceska fora: builder.cz resp forum.builder.cz a programujte.com
programator 09.04.2008 10:50
programator
To druhé je obzvláště zajímavé, mohlo by se jmenovat www.domaciukoly.com. :))
MaSo 09.04.2008 10:54
MaSo
asi preklep, urcite jste myslel to prvni :puff:
programator 09.04.2008 12:47
programator
Delphi tyto informace ziska pomoci API fuhkci operacniho systemu. Pokud chces detekovat start aplika…
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…
Flash_Gordon 09.04.2008 13:31
Flash_Gordon
Mnohem jednodussi cesta je pravidelne kontrolovat seznam bezicich procesu a zaznamenavat procesy spu…
Vladimir 09.04.2008 13:39
Vladimir
A jak tu aplikaci při dosažení 2 hodin schodí?
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…
Vladimir 09.04.2008 14:21
Vladimir
no....jednoduše.. VBS skriptem :-)
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:-)…
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ě…
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…
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…
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…
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…
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…
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…
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.
Mitch 09.04.2008 16:19
Mitch
a to je která řádka?
teh 09.04.2008 16:30
teh
Zkus article.php , sice jsem to nečetl celý ale mělo by to pomoct.
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
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…
teh 09.04.2008 16:57
teh
děkuji všem za rady. zbytek už zvládnu :)
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.

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