Odczyt parametrów systemowych komputera (Internet Explorer)

Projekt powstał na potrzeby usprawnienia korzystania z systemu ServiceDesk działu IT firmy w której pracuję. Zamiast wpisywać ręcznie poszczególne dane dotyczące danego komputera, są one teraz automatycznie pobierane przez program napisany w JScripcie (korzystający z kontrolki ActiveX - stąd ograniczenie jego działania do Internet Explorera) i wpisywane w odpowiednie pola formularza na stronie www (a potem zapisywane do bazy danych).
Dane automatycznie pobierane z systemu:
  - nazwa komputera i jego rodzaj (stacjonarny/notebook);
  - producent i model komputera;
  - numer seryjny komputera (BIOSu płyty głównej) oraz numer produktu (product number);
  - nazwa konta bieżącego użytkownika;
  - nazwa domeny lub grupy roboczej;
  - model procesora i częstotliwość jego pracy;
  - model karty graficznej;
  - producent, model i numer seryjny monitora oraz jego bieżąca rozdzielczość;
  - wielkość pamięci RAM (całkowita i z rozbiciem na każdy moduł);
  - pojemność dysków twardych;
  - nazwa karty sieciowej LAN wraz z jej adresem fizycznym (MAC) i adresem IP (jeśli jest wpisany na stałe);
  - nazwa bezprzewodowej karty sieciowej WLAN wraz z jej adresem fizycznym (MAC) i adresem IP (jeśli jest wpisany na stałe);
  - nazwa modemu GSM wraz z jej adresem fizycznym (MAC) i adresem IP (jeśli jest wpisany na stałe);
  - wersja systemu operacyjnego Windows wraz z jego numerem seryjnym;
  - wersja pakietu MS Office wraz z jego numerem seryjnym;
Kart sieciowych (LAN, WLAN czy GSM) może być w komputerze kilka - zostaną one wtedy rozdzielone na liście przecinkami; może być również kilka wersji pakietu MS Office - zostaną one wypisane analogicznie (od wersji najnowszej do najstarszej).
Aplikacja uwzględnia przy podawaniu danych istnienie 32- i 64-bitowych wersji systemu Windows oraz pakietu MS Office (wiele aplikacji tego nie rozróżnia). Przy rozpoznawaniu wersji danego pakietu MS Office wykorzystałem dane o GUID opublikowane na stronie producenta (które niestety nie są kompletne).
Dodałem też generowanie linka do strony internetowej, gdzie można sprawdzić status gwarancji posiadanego komputera - na razie ta funkcja działa dla sprzętu firm HP, Dell, IBM, Lenovo i Samsung, ale staram się sukcesywanie szukać i dodawać kolejnych producentów, którzy umożliwiają taką operację (ostatnio niestety strona Samsunga przestała poprawnie działać - zgłasza jakiś błąd - mam nadzieję, że to jest czasowe). Wykaz stron dla niektórych producentów, gdzie można sprawdzić status gwarancji, jest dostepny na stronie A.V. Computers - Warranty Check, w przypadku dostępu do numeru seryjnego komputera danego producenta będę sprawdzał, czy można stamtąd uzyskać dane o gwarancji i ewentualnie adaptował to w swojej aplikacji.

Poprawiłem rozpoznawanie numerów seryjnych Windows 8 oraz Office 2013, ponieważ Microsoft zmodyfikował nieco algorytm ich kodowania w rejestrze. Modyfikację algorytmu oparłem na artykule Windows Product Key Finder z marca 2013 roku. Okazuje się, że wiele programów nie uwzględnia zmiany algorytmu przez Microsoft i pokazuje niewłaściwe numery seryjne, które teraz mogą zawierać dodatkową literę "N". Niestety na razie nie rozpracowałem metody odczytywania numeru seryjnego pakietu Office 365, który nie jest, jak w wersjach wcześniejszych, zakodowany w kluczu DigitalProductID rejestru systemowego.

Aplikacja pobiera potrzebne dane z rejestru Windows oraz z systemowej bazy danych przy pomocy zapytań (podobnych do SQL) o nazwie WQL (Windows Query Language).
Część materiałów (dokumentacji) przydatnych przy pisaniu tej aplikacji dostałem od kolegi z pracy - Przemysława Słomiańskiego - za co bardzo mu dziękuję. Jest on autorem używanego w firmie programu ServiceDesk (sdesk), któremu zaproponowałem dodanie nowej funkcjonalności polegającej właśnie na automatycznym pobieraniu stosownych danych o komputerze przy pomocy aplikacji napisanej w JavaScripcie (JScripcie), zamiast konieczności ich samodzielnego sprawdzania (przy pomocy różnych metod/programów) i ręcznego wpisywania. Dzięki tym materiałom (przykłady w VBScripcie) mogłem poszukać konkretnych i bardziej szczegółowych informacji (głównie na stronach serwisu MSDN Microsoftu) i napisać właściwy kod w JScripcie, który robił to co zamierzałem (a nie było to proste, ponieważ większość materiałów znalezionych w internecie zawierała tylko przykłady w VBScripcie, a wywołania stosownych funkcji w JScripcie niestety nieco się różnią - jak się okazało w praktyce czasami dość znacznie).

Na potrzeby tego projektu napisałem dwie biblioteki w JScripcie:
  - do odczytywania różnego rodzaju danych z rejestru systemowego (registry.js);
  - do odczytywania danych z systemowej bazy danych poprzez WQL (wql.js).
Dla wygody używania/analizy kodu stworzyłem osobny moduł o nazwie hardware.js, służący do pobierania wszystkich interesujących nas danych z systemu Windows poprzez użycie powyższych bibliotek. Moduł też można rozbudować o odczyt innych parametrów wedle swoich potrzeb.
Funkcjonalność tej aplikacji została z sukcesem dołączona do programu ServiceDesk i jest dużym ułatwieniem w pracy przy spisywaniu danych systemowych komputera. :)

Dla chętnych poznania mechanizmów WMI i WQL, czyli w jaki sposób działa ta aplikacja, podaję garść linków zewnętrznych:
  Using WMI
  WMI Registry Classes
  StdRegProv class
  WQL (SQL for WMI)
  SWbemServices.ExecQuery method
  Querying with WQL
  Creating a WMI Script
  WMI jako obiektowa baza danych: Wprowadzenie (1/6)   32-bit and 64-bit Application Data in the Registry

Zobacz jak działa demo tej aplikacji (tylko Internet Explorer).

Uwaga: aby aplikacja mogła zadziałać, trzeba zapisać plik index.html (do którego prowadzi powyższy link demo, plik ten zawiera też dla wygody scaloną z nim bibliotekę registry.js) na swój komputer (np. na Pulpit), otworzyć go w przeglądarce Internet Explorer (jeśli pojawi się komunikat Zezwalaj na zablokowaną zawartość, to należy się zgodzić - w IE 8 i starszych pojawi się u góry strony pasek ostrzeżenia na który należy kliknąć i zezwolić na uruchomienie zablokowanej zawartości), a następnie wejść do menu Narzędzia -> Opcje internetowe -> zakładka Zabezpieczenia -> strefa Lokalny intranet a następnie obniżyć poziom zabezpieczeń dla tej strefy na Niski (opcja Włącz tryb chroniony musi być wyłączona) i dać OK. Teraz możemy już uruchomić (klikając na przycisk "Odczytaj dane systemowe") skrypt odczytujący parametry komputera (w niektórych wersjach IE konieczne jest jeszcze wcześniejsze odświeżenie strony - np. klawiszem F5) - pojawi się komunikat Czy chcesz zezwolić na interakcję? - należy sie oczywiście na to zgodzić (proszę się nie obawiać - ten program jest bezpieczny - niczego nie modyfikuje i niczego nie przesyła - nie wymaga dostępu do internetu bo pracuje lokalnie - jedynie wyświetla na ekranie odczytane dane). Po skończeniu działania aplikacji można już zresetować ustawienia wszystkich stref do poziomu domyślnego (lub takiego, jak było wcześniej).
Nie należy próbować uruchamiać aplikacji bezpośrednio ze strony internetowej - domyślne zabezpieczenia przeglądarki nie pozwolą na uruchomienie kontrolki ActiveX.

Powrót do strony z wykazem projektów

Valid HTML 4.01 TransitionalValid CSS