
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.
Nevim jestli Delphi zapouzdřují funkce pro práci s procesy, každopádně GetProcessTimes vrací čas, po který byl proces spracováván.
ms683223(VS.85).aspx
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
.
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.
Jestli je dost vychytralej, tak si tu aplikaci přejmenuje
Ale jestli má svůj omezenej účet tak si moc neškrtne.
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.
Ke hrám obvykle NENÍ třeba admin účet..

Vyprávěj to vypatlaným programátorům her...
Na druhou stranu většinou není nemožné nastavit práva v registru a na adresářích aby to běželo.
mate tu dve ceska fora:
builder.cz resp forum.builder.cz
a
programujte.com
To druhé je obzvláště zajímavé, mohlo by se jmenovat www.domaciukoly.com.
asi preklep, urcite jste myslel to prvni
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.
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 :)
A jak tu aplikaci při dosažení 2 hodin schodí?
nijak tuhle část zadání jsem nečetl :)
ale možná by to šlo přes alerty v performance monitoru, je tam možnost při alertu spustit nějaký systémový příkaz. :) Ale nekoukal jsem na to podrobně.
no....jednoduše.. VBS skriptem
Když už se bude psát skript, tak nemusí používat Performance monitor ale čas kontrolovat přes WMI
Koukám co člověk, to jinej přístup :)
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ější OS :)
Jo tak já v době NT jel na Win95 (mi ještě teklo mlíko po bradě) a jedinej postup kterej se dal z tohohle ořezávátka přenést, bylo klikání na ikony
Ale jestli se nepletu, tak WMI se na NT4 dalo doinstalovat.
my měli Windows NT v provozu ještě v roce 2003 :) WSH se dal doinstalovat, ale do systému se WMI samotné vecpat nedalo IMHO.
No když to funguje, tak proč na to šahat
Pro NT4 jsem našel instalaci WMI ale bude to nějaká okleštěná verze (už jen podle CORE v názvu
)
http://www.microsoft.com/downloads/details.aspx?Fam ilyID=c174cfb1-ef67-471d-9277-4c2b1014a31e&displayl ang=en
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šší.
Otevři si v Delphi nápovědu a hledej GetProcessTimes a TerminateProcess. Měly by tam být i příklady použití.
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.
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
IMHO ty získáváš handle z názvu okna. Lepší by bylo získavat handle procesu z názvu souboru.
a to je která řádka?
Zkus article.php , sice jsem to nečetl celý ale mělo by to pomoct.
nefunguje to
a je to i v diskuzi pod tím, že to funguje jen někomu a někomu ne
oprava, zapoměn ljsem u druhého tlačítka nadefinovat funkci .. u prvního jsem to udělal a na to druhý jsem zapomněl .. teďka si jdu hrát, jak to udělal :)
děkuji všem za rady. zbytek už zvládnu :)