Centrum skryptów - Systemy operacyjne

Jak ustalić symbol waluty używany na danym komputerze? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

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 ustalić symbol waluty używany na danym komputerze?

Cześć, Skrypciarze! Czy można jakoś ustalić symbol waluty, którego używa się na danym komputerze?

-- IR

Cześć, IR!

Cześć wszystkim!

Ojciec przymusił mnie trochę dziś i mam tu usiąść za niego i sam coś pokombinować ze skryptami, musicie więc wytrzymać ze mną przez chwilę. Nie wiem czy dobrze się orientuję, ale z tego co wiem nie istnieje ani klasa WMI ani obiekt COM, który informowałby o tym, jakiego symbolu waluty używa się w danym momencie na komputerze, całkiem możliwe, że to właśnie dlatego ojciec pozwolił mi napisać ten artykuł – sam nie wie. Nie wiem trochę w jakiej komitywie jest z czytelnikami, postaram się więc nie za osobiście.

Zaskoczę go chyba jednak, bo skrypty mam chyba w genach i myślę, że wiem, jak wygląda skrypt, który informowałby jakiego symbolu waluty używa się w danym momencie na komputerze. W celu odczytania tej wartości z rejestru używa się pewnie właśnie WMI:

Const HKEY_CURRENT_USER = &H80000001



strComputer = "."

 

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

 

strKeyPath = "Control Panel\International"

strValueName = "sCurrency"



objRegistry.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue



Msgbox strValue

Nie wiem co prawda jak mój ojciec zaczyna artykuły, ale pewnie od jakiejś bezsensownej anegdoty lub żarciku, który albo jest oczywisty, albo zupełnie nieśmieszny. Tego mam nadzieję we krwi nie mam.

Zacznę więc po prostu od omawiania skryptu.

Zaczynamy od zdefiniowania stałej HKEY_CURRENT_USER i ustawienia jej wartości na &H80000001; będziemy używać tej stałej w celu poinstruowania skryptu z jakim rejestrem chcemy pracować.

Uwaga: Nazwę HKEY_CURRENT_USER dedykuję mojej matce, ona bardzo lubi dziwne nazwy i imiona, wyobraźcie sobie, że chciała nazwać mnie Iones, ale ojciec jej to wyperswadował. Szacunek dla niego.

Uwaga od Redakcji: Osoby noszące imię Iones przepraszamy za komentarz i informujemy, że nie miał być przykry. Iones to naprawdę bardzo fajne imię.

Po zdefiniowaniu stałej łączymy się z usługą WMI na komputerze lokalnym, zanim więc ojciec zacznie „mędzić”, mi za plecami uprzedzę go i napiszę, że sam wiem, że skrypt może być także zastosowany na komputerze zdalnym. Wystarczy tylko nadać jego nazwę strComputer (dobrze, że tak mnie matka nie chciała nazwać, bo w tym przypadku ojciec by pewnie nie oponował za bardzo):

strComputer = "atl-fs-001"

Trzeba jednak pamiętać o dwóch rzeczach. Po pierwsze, że łączymy się z obszarem nazw root\default. Nie jest to standardowa procedura, bo zapewne zazwyczaj łączycie się z obszarem nazw root\cimv2. Zwróćcie uwagę ponadto, że połączyliśmy się bezpośrednio z klasą StdRegProv. To dlatego, że metody WMI do pracy z rejestrami są „statyczne”, czyli, że pracują z klasą a nie poszczególnymi jej wystąpieniami. Nie wiem czy to dobrze, czy źle, tak po prostu jest.

Moment.

Ojców stojących za moimi plecami uprasza się o natychmiastowe wycofanie się ze swoich pozycji bądź nie komentowanie!

Skąd wiem o obszarach nazw i metodach statycznych? Po prostu wiem. Ponawiam więc petycję z poprzedniego zdania, albo sam dokończysz ten skrypt.

Po wyperswadowaniu swojego mogę już spokojnie wrócić do artykułu.

Po połączeniu się z usługą WMI używamy następujących wierszy kodu w celu nadania wartości parze zmiennych:

strKeyPath = "Control Panel\International"

strValueName = "sCurrency"

Zmienna strKeyPath identyfikje klucz rejestru (w roju HKEY_CURRENT_USER) z którym chcemy pracować; zmienna sCurrency jest wartością, którą chcemy odczytać z rejestru.

W celu pobrania symbolu waluty z rejestru musimy wywołać metodę GetStringValue, nadać jej stałą HKEY_CURRENT_USER i zmienne strKeyPath, strValueName, oraz strValue:

objRegistry.GetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue

Trzecia zmienna, strValue, jest nam koniecznie potrzebna. Jest ona parametrem wyjściowym: podajemy nazwę zmiennej, a GetStringValue przypisuje wartość pobraną z rejestru do tego parametru wyjściowego. Innymi słowy, GetStringValue pobierze symbol waluty z rejestru, a następnie przypisze ten symbol do parametru wyjściowego. Oznacza to, że możemy ustalić symbol waluty poprzez samo wywołanie echa wartości strValue:

Msgbox strValue

Na naszej maszynie testowej okno komunikatu wygląda następująco:

Dlaczego skorzystaliśmy z okna komunikatu zamiast wywołać echo wartości okna polecenia? Na to niech odpowie mój ojciec. Ja się musze powoli zmywać.

Nie mogę się zmyć, aż nie wytłumaczę wszystkiego. Tłumaczę więc. Skorzystaliśmy z tej metody z uwagi na to, że w zależności od ustawień komputera, istnieje duża szansa, że symbol waluty euro nie będzie rozpoznawalny w oknie polecenia. Po wywołaniu takiego echa na naszej maszynie testowej zamiast symbolu euro otrzymujemy następujący wynik:

?

Chyba nie o to nam chodziło.

Tak przy okazji, jeżeli chcecie zmienić symbol waluty, to możecie skorzystać z poniższego skryptu:

Const HKEY_CURRENT_USER = &H80000001



strComputer = "."

 

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

 

strKeyPath = "Control Panel\International"

strValueName = "sCurrency"

strValue = "$"



objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue

Jak sami widzicie, powyższy skrypt jest bardzo podobny do tego, który pobiera symbol waluty z rejestru. Z dwiema różnicami - po pierwsze, nie używamy tu parametru wyjściowego tylko przypisujemy żądany symbol waluty zmiennej strValue:

strValue = "$"

Po drugie, korzystamy z metody SetStringValue w celu wpisania nowej wartości do rejestru:

objRegistry.SetStringValue HKEY_CURRENT_USER, strKeyPath, strValueName, strValue

Teraz już naprawdę muszę lecieć, mam nadzieję, że to się rzeczywiście komuś przydaje, i że to w odpowiedzi prawdziwe listy, a nie pytania, które ojciec stawia sobie sam, a następnie odpowiada na nie na łamach.

Lecę, dziękuję za uwagę, teraz zostawiam już ojcu do poprawki.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne