Edycja skryptu VBS

Mam taki skrypt (ktoś mi kiedyś uprzejmie napisał, ja się na tym nie znam :stuck_out_tongue: ):
Set wshshell = wscript.CreateObject(“WScript.Shell”)
wscript.sleep 35000
Wshshell.run “D:\0\Rainlendar2.lnk”
wscript.sleep 400000
Wshshell.run “taskkill /F /im Rainlendar2.exe”

Czy da się go zmienić tak, aby program był uruchamiany tylko raz dziennie wraz z systemem? Włączam i wyłączam laptop wiele razy dziennie o bardzo różnych porach dnia i nocy, więc nie mogę ustalić konkretnej godziny. Po prostu chciałabym, aby program był uruchamiany tylko za pierwszym uruchomieniem systemu każdego dnia, bez względu na to, o której godzinie to pierwsze uruchomienie nastąpi.

Jak działa ten obecny skrypt?

  • uruchamia Ci aplikację
  • czeka X czasu
  • zabija proces?

Jak ma działać nowy:

  • uruchamiać program raz dziennie (jak już raz się wykonał w cyklu dobowym, to ma się nie uruchamiać),
  • po jakimś czasie ma być automatycznie wyłączany?
    Napisz algorytm pod to.

Kolejna sprawa - co dla Ciebie oznacza uruchamianie laptopa? Pełne wyłączenie? Czy tylko zamykasz klapę - laptop się hibernuje/usypia a po otwarciu masz dokładnie to samo otwarte, co przed zamknięciem?

Dokładnie tak działa

Tak, po takim samym czasie jak teraz.

Pełne uruchamianie przyciskiem power. Nie używam hibernacji/usypiania

Ja bym to ubrał w task windowsa otoczony skryptem batch uruchamiającym ten VBS :smiley:

No ale założę się, że jest gdzieś w internecie mały programik z ładnym GUI, który po wskazaniu pliku robi to bez tych kombinacji - tylko dobrze użyć google.

https://groups.google.com/forum/#!topic/alt.msdos.batch/SCIf7XAlM6Q

1 polubienie

Dziękuję, tylko sama raczej sobie z tym nie poradzę :frowning: Jak już pisałam, nie znam się na tym. Miałam nadzieję, że wystarczy coś zmienić/dopisać do tego co już mam i że ktoś mi poda gotowca :roll_eyes:
Raczej nie chcę instalować dodatkowych programów, bo pewnie ten program musiałby cały czas działać w tle

Np. może być coś takiego, gdzie nazwę pliku można sobie zmienić na inną.
Const ForReading = 1: Const ForWriting = 2: plik=“C:/data.txt”
Set Wshshell = WScript.CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
if objFSO.FileExists(plik)=false then
Set MyFile = objFSO.CreateTextFile(plik,True)
MyFile.WriteLine(“off”)
MyFile.Close
end if
Set objFile = objFSO.OpenTextFile(plik, ForReading)
strLine1 = objFile.ReadLine
if strLine1<>cstr(Date) then
objFile.Close
Set objFile = objFSO.OpenTextFile(plik, ForWriting)
objFile.Write Date
objFile.Close
WScript.sleep 35000
Wshshell.run “D:\0\Rainlendar2.lnk”
WScript.sleep 400000
Wshshell.run “taskkill /F /im Rainlendar2.exe”
end if

Jeżeli skrypt będzie kopiowany, to należy przed jego uruchomieniem zmienić np. w notatniku ręcznie znaki cudzysłowu aby były zrozumiałe dla interpretatora w przeciwnym wypadku będzie pokazywany błąd.
Skrypt najpierw sprawdza czy na dysku znajduje się plik C:/data.txt
Jeżeli pliku brak, to zostanie utworzony, a następnie sprawdzane jest
czy w pliku zapisana jest aktualna data. Jeżeli aktualna data nie jest zapisana, to
zostanie ona zapisana i uruchomiony zostanie program Rainlendar2.lnk w przeciwnym wypadku czynności te zostaną pominięte.

2 polubienia

@floyd - bardzo dziękuję :slight_smile: Dzisiaj przetestuję i dam znać

Const ForReading = 1: Const ForWriting = 2: plik="C:/data.txt"
Set Wshshell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
if objFSO.FileExists(plik)=false then
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile(plik,True)
MyFile.WriteLine("off")
MyFile.Close
end if
Set objFile = objFSO.OpenTextFile(plik, ForReading)
strLine1 = objFile.ReadLine
if strLine1<>cstr(Date) then
objFile.Close
Set objFile = objFSO.OpenTextFile(plik, ForWriting)
objFile.Write Date
objFile.Close
WScript.sleep 35000
Wshshell.run "D:\0\Rainlendar2.lnk"
WScript.sleep 400000
Wshshell.run "taskkill /F /im Rainlendar2.exe"
end if

i chyba problem z cudzysłowami ogarnięty (Code and Syntax Highlighting).

1 polubienie

Już sobie poprawiłam w notatniku, ale dzięki :slight_smile:

Mnie zaciekawił komunikat o zapisie poza plikiem data.txt ale to może wina, że go opróżniłem w notatniku.

Poczekam 6 minut i 40 sekund i zobaczę czy po zamknięciu kalkulatora bez edycji pliku będzie to samo, spróbuje potem przestawić datę na dzień do przodu (by sprawdzić jak wtedy zareaguje).


OK, działa - muszę poszukać czemu się wywalił jak plik z datą był pusty (może nie może być otwarty w notatniku).

Nie musisz czekać 6 minut wystarczy zmniejszyć czas oczekiwania np. na: WScript.sleep 40
Jeżeli plik data.txt jest pusty, to znaczy , że nie zawiera żadnej linii i stąd błąd. Przed taką ewentualnością też można zabezpieczyć,wystarczy w skrypcie dodać dodać linię: On Error Resume Next

Const ForReading = 1: Const ForWriting = 2: plik=“C:/data.txt”
Set Wshshell = WScript.CreateObject(“WScript.Shell”)
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
if objFSO.FileExists(plik)=false then
Set MyFile = objFSO.CreateTextFile(plik,True)
MyFile.WriteLine(“off”)
MyFile.Close
end if
On Error Resume Next
Set objFile = objFSO.OpenTextFile(plik, ForReading)
strLine1 = objFile.ReadLine
if strLine1<>cstr(Date) then
objFile.Close
Set objFile = objFSO.OpenTextFile(plik, ForWriting)
objFile.Write Date
objFile.Close
WScript.sleep 35000
Wshshell.run “D:\0\Rainlendar2.lnk”
WScript.sleep 400000
Wshshell.run “taskkill /F /im Rainlendar2.exe”
end if

1 polubienie

Niestety, wyskakuje mi taki oto błąd: https://i.imgur.com/F3AZiGR.png :frowning:

Nic dziwnego próbujesz plik tekstowy zapisać na partycję systemową, która jest domyślnie chroniona i potrzebne są prawa administratora.
Są dwa wyjścia, albo zmienić lokalizację pliku, albo uruchamiać skrypt z uprawnieniami administracyjnymi.

2 polubienia

Tak mi się właśnie zdawało, ale myślałam, że musi być na C. Czyli nic się nie stanie jak: “C:/data.txt” zamienię na “D:/data.txt”?

1 polubienie

Nic się nie stanie, bo to ścieżka bezwzględna.

2 polubienia

Opcjonalnie można wyłączyć UAC i pracować cały czas na koncie administratora

lub

wrzucić ten plik w harmonogram zadań (zamiast z folderu “Autostart”) i ustawić mu uruchamianie z uprawnieniami administracyjnymi.


Oczywiście oba podpadają jako rozszerzenie opcji “uruchamiać skrypt z uprawnieniami administracyjnymi”.

1 polubienie

Przetestowane, działa jak chciałam :slight_smile:
Dziękuję za pomoc :slight_smile:

1 polubienie