Centrum skryptów - Systemy operacyjne

Jak zmienić tekst wygaszacza ekranu Marquee?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak zmienić tekst wygaszacza ekranu Marquee?

Cześć Skrypciarze! Pytanie

Cześć Skrypciarze! Jak zmienić tekst wygaszacza ekranu Marquee?

-- SJ

Cześć Skrypciarze! Odpowiedź

Hej, SJ. Pozdrowienia z mroźnego pustkowia, znanego dawniej pod nazwą Redmond, WA. W poniedziałkową noc dziwna listopadowa zawieja przeszła nad okolicami Seattle, lecz zamiast pozostawić po sobie śnieg, zostawiła tylko jakiś cal lodu, który w doskonały sposób sparaliżował życie w całym regionie. (Jeśli pochodzisz ze Środkowego Zachodu/Alaski/Norwegii/Grenlandii lub z jakiegoś innego miejsca, które z powodu odrobiny śniegu i lodu nie jest całkowicie paraliżowane, możesz tu śmiało wstawić swój ulubiony żart "Ludzie z Seattle to mięczaki"). Czy jest tutaj rzeczywiście tak źle? Cóż, spójrzmy na to w ten sposób: ostatniej nocy ludzie spali na autostradzie w swoich samochodach, gdyż ruch samochodowy praktycznie nie istniał, a podróżujący byli zbyt daleko od domu, aby iść tam pieszo. Wobec tego spędzili noc śpiąc w samochodach na I-405.

Straszne.

Nie polepsza sprawy to, że Skrypciarz, który jest autorem tej rubryki, napisał ją we wtorek rano. Oprócz jednej osoby na drugim końcu korytarza (która wyglądała, jakby spędziła noc w pracy) budynek w którym pracuje Skrypciarz był całkowicie wyludniony: oczywiście wszyscy zostali ostrzeżeni, by nie przyjeżdżali do pracy podczas oblodzenia lub zadzwonili, że z powodu lodu nie mogą dotrzeć do pracy. Tak czy inaczej, Skrypciarz który napisał tę rubrykę, miał dla siebie bardzo dużo miejsca.

Znasz te filmy, w których dzieciak przypadkowo zostaje zamknięty na noc w sklepie z zabawkami lub ze słodyczami? Cóż, mając cały budynek Microsoftu wyłącznie dla siebie, można poczuć się równie fajnie.

Prawie.

Dlaczego tak się stało? Czy Skrypciarz, który napisał tę rubrykę mieszka w bocznej ulicy, która jest niebezpieczna nawet wówczas, gdy nie ma śniegu i lodu na drogach? Czy nie mógł on słusznie pozostać w domu, z powodu złych warunków na drodze? Czyż nie byłoby w tym większego sensu niż przejście kilku kilometrów na przystanek autobusowy, a następnie oczekiwanie na autobus, który w efekcie wlekł się jak żółw? I wreszcie po zniesieniu wszystkich tych trudności, jego nagroda jest taka, że musiał spędzić dzień w pracy? Czy nie mógł on zostać w łóżku tego ranka, tak jak wszyscy inni?

Och, oczywiście: teraz można mu to mówić!

No cóż. Skoro już zrobiliśmy aż tyle tego ranka, możemy również pokazać Ci skrypt, który zmieni tekst wygaszacza ekranu Marquee. W efekcie za każdym razem gdy ten wygaszacz uruchomi się, sprawdzi on zawartość rejestru, gdzie zapisany jest tekst jaki powinien być wyświetlony. To oznacza, że wszystko co musimy zrobić, aby zmienić ten tekst, to modyfikacja odpowiedniej wartości w rejestrze. Czy to jest trudne? No nie za bardzo:

Const HKEY_CURRENT_USER = &H80000001



strComputer = "."



Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

 

strKeyPath = "Control Panel\Screen Saver.Marquee"

strValueName = "Text"

strStringValue = FormatDateTime(Date, vbLongDate)



objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strStringValue

Jak widzisz, zaczęliśmy od zdefiniowania zmiennej o nazwie HKEY_CURRENT_USER oraz ustawienia jej wartości na &H80000001; użyjemy tej stałej nieco później, aby przekazać informację o tym z którą gałęzią rejestru zamierzamy pracować. (To prawda: zamierzamy pracować z gałęzią HKEY_CURRENT_USER. Jak to odgadłes?)

Po zdefiniowaniu stałej łączymy się z usługą WMI na lokalnym komputerze (Ten skrypt może być również uruchamiany na maszynie zdalnej; w tym celu wystarczy przypisać nazwę tego komputera do zmiennej strComputer). Jak do tej pory chyba nie było nic bardzo trudnego? Musimy połączyć się z klasą StdRegProv, która znajduje się w obszarze nazw root\default. To różni się od klas WMI używanych w typowych skryptach administracyjnych, które niemal zawsze umieszczone są w obszarze nazw root\cimv2. Jest to coś, o czym trzeba pamiętać.

Po połączeniu się z usługą WMI musimy przypisać wartości do trzech różnych zmiennych:

  • strKeyPath, ścieżka do klucza rejestru, umieszczonego w gałęzi HKEY_CURRENT_USER. Ponieważ chcemy połączyć się z kluczem Control Panel\Screen Saver.Marquee jedynym słusznym i odpowiednim rozwiązaniem jest przypisanie zmiennej strKeyPath wartości Control Panel\Screen Saver.Marquee.
  • strValueName, nazwa aktualnej wartości klucza rejestru, którą chcemy zmienić. Aby zmienić tekst wygaszacza ekranu musimy zmodyfikować wartość łańcucha znaków (REG_SZ) o nazwie Text. Zatem przypisujemy łańcuch Text do zmiennej strValueName.
  • strStringValue, nowy tekst wygaszacza ekranu. Zrobiliśmy tutaj fajną rzecz, a mianowicie jako tekst wygaszacza ekranu wstawiliśmy bieżącą datę. Lecz nie jest to data zapisana w typowy sposób: używamy tutaj funkcji VBScript FormatDateTime, zwracającej datę, która wygląda tak: 29 listopada 2006. Aby uzyskać takie fajne dane wyjściowe przekazaliśmy do funkcji FormatDateTime dwa argumenty: wartość, która zostanie sformatowana (funkcję VBScript Date) oraz sposób formatowania, jaki chcemy zastosować (stałą VBScript vbLongDate). Czy oprócz tego formatu "long" są jeszcze inne formaty daty/godziny, które moglibyśmy zastooswać w tej metodzie? Oczywiście. Jeśli chcesz dowiedzieć się szczegółów, zajrzyj na stronę Microsoft Windows 2000 Scripting Guide.

Po przypisaniu wartości do trzech naszych zmiennych jesteśmy gotowi iść dalej i zmienić tekst w rejestrze. Aby to zrobić po prostu wywołujemy metodę SetStringValue, przekazując do niej cztery argumenty:

  • Stałą HKEY_CURRENT_USER
  • Zmienną strKeyPath
  • Zmienną strValueName
  • Zmienną strStringValue

I to już wszystko co mamy do zrobienia. Przede wszystkim nie ma potrzeby wylogowywania użytkownika i ponownego logowania po dokonaniu zmiany. Tak jak powiedzieliśmy, za każdym razem gdy wygaszacz ekranu uruchamia się, pobiera ostatnie ustawienia z rejestru, włącznie z tekstem, który ma być wyświetlony. A zatem te zmiany będą miały efekt następnym razem, gdy uruchomi się wygaszacz ekranu.

Co się zaś tyczy życia tutaj w arktyce, cóż, teraz świeci słońce. Jest wciąż zimno, jednakże oznacza to, że lód prawdopodobnie stopi się podczas dnia, rozmrożony lód ponownie zamarźnie w nocy i znów historia kołem się zatoczy. Cóż za cudowna pora roku, nieprawdaż?

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne