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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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:;-) 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
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: 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

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