Vypnutie PC po ukonceni procesu.

Informácie o software, ankety...
wintermute
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 266
Registrovaný: 07 júl 2009, 7:17

Re: Vypnutie PC po ukonceni procesu.

Príspevok od používateľa wintermute »

Zbytočne to komplikujete. Toto sa dá riešiť jednoduchým scriptom:

Kód: Vybrať všetko

option explicit
Dim WshShell, FXisRunning, colprocessList, strComputer, runText, objWMIService

Set WshShell = WScript.CreateObject("Wscript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
WScript.Sleep 10000

do 
    WScript.Sleep 1000
    Set colProcessList = objWMIService.ExecQuery _
        ("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'") 'tu si prepis notepad.exe na nazov procesu, ktory chces sledovat
    FXisRunning = (colProcessList.count <> 0)
    Set colprocessList = Nothing
loop while FXisRunning

runText = "shutdown -s -f -t 60 -c " & chr(34) & "Pocitac sa vypina" & chr(34)
WshShell.run(runText)
Kód treba vytvoriť skopírovať do notepadu a uložiť s príponou .vbs. Script je treba spúšťať až po spustení toho prehrávača (keď sa objaví medzi procesmi) V scripte je samozrejme treba prepísať názov rocesu z notepad.exe na názov procesu, ktorý sa sleduje.

Kto nerozumie tomu čo tento script robí:
-script 10s čaká (v prípade, že by sledovaný proces ešte enenabehol)
-v cykle s periódou kontroluje či daný proces beží
-keď proces skončí (vypne sa prehrávač či čo to je) cyklus skončí a script pokračuje ďalším riadkom
-premenná txtRun obsahuje reťazec, ktorý pri zadaní do Run-u vypne počítač po minúte
  Konkrétne to je: shutdown -s -f -t 60 -c "Pocitac sa vypina"
Už len doplním, že vypnutie sa dá zastaviť zadaním shutdown -a do run-u

Jednoduchšie to už spraviť neviem.
hojko
Site Admin
Site Admin
Používateľov profilový obrázok
Príspevky: 38516
Registrovaný: 24 apr 2004, 18:29
Bydlisko: Európa
Kontaktovať používateľa:

Re: Vypnutie PC po ukonceni procesu.

Príspevok od používateľa hojko »

Grim: Aj si si precital tuto temu o com sa pise alebo si sem prisiel len tak hodit sprostost do eteru???
dudo02
King
King
Používateľov profilový obrázok
Príspevky: 1924
Registrovaný: 23 nov 2006, 6:26

Re: Vypnutie PC po ukonceni procesu.

Príspevok od používateľa dudo02 »

Zaspim,zobudim sa rano o 3 a nechce sa mi vstavat z postele kvoli vypnutiu PC...
Predstavte si TV ku ktorej mate dialkovy ovladac,ale neviete nim TV vypnut-chyba zakladna funkcia :) .Urcite by ste kvoli tomu netahali kable ku posteli atd...Tym padom by samotne dialkove ovladanie stratilo zmysel...

//autoeditácia príspevku (10 Okt 2010, 6:15)
wintermute napísal:...
Dakujem.Presne taketo nieco som hladal.Funguje to pekne a je to jednoduche :) .

No este by som potreboval vyriesit to,aby sa danny skript automaticky spustil-ale az potom,ako sa spusti proces.Alebo by uplne stacilo,ak by sa skript spustil dajme tomu po 30s po stare OS.Pretoze ako si napisal,tak skritp je potrebne spustit az ked proces bezi.Ak totiz hodim skript a aj proces do polozky"startup",tak sa PC vypina ihned.
Niekde som videl program,ktory dokazal riadit procesy vlozene do polozky"startup" a to tak,ze sa dal ku kazdemu procesu pridelit cas,po uplynuti ktoreho sa spustil.Cize sa procesy nespustali hned po starte,ale az po uplynuti vopred nastavenej doby od startu OS.Sluzilo to na zrychlenie systemu pri starte,ale neviem si spomenut na nazov a nedari sa mi nic vygooglit.

Kto nerozumie tomu čo tento script robí:
-script 10s čaká (v prípade, že by sledovaný proces ešte enenabehol)
-v cykle s periódou kontroluje či daný proces beží
-keď proces skončí (vypne sa prehrávač či čo to je) cyklus skončí a script pokračuje ďalším riadkom
-premenná txtRun obsahuje reťazec, ktorý pri zadaní do Run-u vypne počítač po minúte
Konkrétne to je: shutdown -s -f -t 60 -c "Pocitac sa vypina"

Kde je prosim ta v tom skripte parameter 10sekund?Mozno by stacilo tuto hodnotu zmenit na vyssiu a mal by som to vyriesene,ci???
\\Tak nakoniec som to vyriesil programom STARTUPPER,ktory som pridal do polozky"startup" a ktory umoznuje spustat lubovolne prikazy po urcitej dobe-ma moznost od 3s do 60s,co mne postacuje.Ja som do programu pridal wintermuteho skript,a ten sa mi spusta po 5s.Program prikladam ako prilohu,keby niekto nahodou niekedy riesil podobny problem.

Dakujem pekne vsetkym za pomoc,ale hlavne uzivatelovi wintermute,za jednoduchy skript.
Prílohy
Startupper.rar
(35.45 KiB) 25 stiahnutí
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Vypnutie PC po ukonceni procesu.

Príspevok od používateľa audiotrack »

dudo02 napísal: Kde je prosim ta v tom skripte parameter 10sekund?Mozno by stacilo tuto hodnotu zmenit na vyssiu a mal by som to vyriesene,ci???
je to riadok WScript.Sleep 10000
wintermute
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 266
Registrovaný: 07 júl 2009, 7:17

Re: Vypnutie PC po ukonceni procesu.

Príspevok od používateľa wintermute »

Áno je to riadok WScript.Sleep 10000
10000 je tam pretože čas ako dlho bude script idlovať sa píše v milisekundách 1s = 1000ms
v VBscripte sa môže používať pre sleep tuším len rozsah integer, takže maximálne odporúčam dávať 30s v prípade, že treba viac, tak stačí nakopírovať daný riadok viackrát podseba, alebo ho xkrát točiť v cykle For.
Osobne by som pred použitím ďalšej aplikácie uprednostnil úpravu scriptu. Samozrejme, že by sa dal upraviť aj tak, že by detekciu ukončenia procesu spustil až po jeho spustení, ale na to som príliš lenivý.

/edit:
takže nakoniec som sa dokopal k tomu upraviť ten script tak, aby nebolo treba žiadnu 3rd aplikáciu:

Kód: Vybrať všetko

option explicit
Dim WshShell, FXisRunning, colprocessList, strComputer, runText, objWMIService

Set WshShell = WScript.CreateObject("Wscript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

do
    WScript.Sleep 1000
    Set colProcessList = objWMIService.ExecQuery _
        ("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'") 'tu si prepis notepad.exe na nazov procesu, ktory chces sledovat
    FXisRunning = (colProcessList.count <> 0)
    Set colprocessList = Nothing
loop while Not FXisRunning

WScript.Sleep 10000

do
    WScript.Sleep 1000
    Set colProcessList = objWMIService.ExecQuery _
        ("SELECT * FROM Win32_Process WHERE Name = 'notepad.exe'") 'tu si prepis notepad.exe na nazov procesu, ktory chces sledovat
    FXisRunning = (colProcessList.count <> 0)
    Set colprocessList = Nothing
loop while FXisRunning

runText = "shutdown -s -f -t 60 -c " & chr(34) & "Pocitac sa vypina" & chr(34)
WshShell.run(runText)
Napísať odpoveď