Moduł Win32

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa

Obsluga modulu Win32

Win32 jest bardzo obszernym modulem umozliwiajacym bezposredni dostep do funkcji zewnetrznych WinAPI. Dzieki nim mamy mozliwosc m.in. tworzyc pliki (katalogi), kopiowac pliki, w oparciu o architekture Windows, co daje nam pewnosc ze jakakolwiek tego typu operacja rzeczywiscie zadziala :-) A powaznie - mamy tez dostep do rozszerzen typowych dla systemu, takich jak latwe operacje na nazwach w formacie Unicode, nadawanie katalogom przeznaczenia zgodnie ze standardami Windows i innych.

Win32 API

W sklad API samego Win32 wchodzi wiele metod, uruchamianych jak metody klasy (nie instancji) poprzez Win32::Metoda

Sposrod nich na wyroznienie zasluguja:

Win32::BuildNumber() Win32::CopyFile(FROM, TO, OVERWRITE) Win32::CreateFile(FILE) Win32::FsType() Win32::GetFolderPath(FOLDER [, CREATE]) Win32::GetFullPathName(FILENAME) Win32::MsgBox(MESSAGE [, FLAGS [, TITLE]])

oraz metody zbierajace informacje o systemie, z ktorych najwazniejsze to:

Win32::GetNextAvailDrive() Win32::GetOSVersion() Win32::GetOSName() Win32::NodeName() Win32::GetTickCount() Win32::IsAdminUser() Win32::IsWinNT() Win32::IsWin95()

Procz tego mamy np ciekawa funkcje MsgBox (nazwa i przeznaczenie oczywiste), dzieki ktorej mozna usprawnic komunikacje z uzytkownikiem i dodac 'flavoru' do naszego skryptu.

Funkcja AbortSystemShutdown moze byc przydatna przy walce z wirusem Ms-Blast (przy SP2 do systemu XP to co prawda nie jest juz problem) uzywajac jej jako symulacje polecenia systemowego shutdown /a (ktore jak wiadomo konczylo sekwencje konczaca system wywolywana przez Ms-Blast). Mozna wiec wyobrazic sobie skrypt Blast-antidote.pl :-)

Uzycie

Warto przyjrzec sie zastosowaniu GetFolderPath, dzieki ktorego mamy dostep do katalogow standardowych Windows (lub mozemy je stworzyc jesli z jakichs powodow nie istnieja). Pelna lista ID katalogow standardowych - p. dokumentacja CPAN

Aby wyluskac pelna nazwe systemu operacyjnego, jego wersji(podwersji), nr buildu itp nalezy przeparsowac odpowiednio zawartosc listy zwracanej przez Win32::GetOSVersion(). Zwracany przez ta metode version-string jest zgodny z konwencjami nazewniczymi wersjonowania systemow Windows.

use Win32; use strict; use warnings; sub GetWinVersionString { my @version = Win32::GetOSVersion(); my $id = $version[ 4 ]; my $major = $version[ 1 ]; my $minor = $version[ 2 ]; my $build = $version[ 3 ]; my $addinfo = $version[ 0 ]; my $name = ( $id == 1 && $major == 4 )? ( $minor == 0 )? "Windows 95" : ( $minor == 10 )? "Windows 98" : ( $minor == 90 )? "Windows Me" : "Unknown" : ( $id == 2 && $major == 3 )? "Windows NT 3.51" : ( $id == 2 && $major == 4 )? "Windows NT 4" : ( $id == 2 && $major == 5 )? ( $minor == 0 )? "Windows 2000" : ( $minor == 1 )? "Windows XP" : ( $minor == 2 )? "Windows 2003 Server" : "Unknown" : ( $id == 2 && $major == 6 )? "Windows Vista" : "Unknown"; return $name . " " . $addinfo . " (build " . $build . ")" ; } my $menu_id = Win32::MsgBox( "Do you want to format your hard drive?", MB_ICONEXCLAMATION | 3, "Decisions, decisions" ); if ( $menu_id == 6 ) { print "# Formatting the users hard drive :-)" } elsif ( $menu_id == 7 ) { print "# Convince the user formatting his hard drive is just what he needs" } elsif ( $menu_id == 2 ) { print "# Ok cancel, tis a smart one" } print "\nYou're running the best system in the world.\n\nVersion:\t\t " . GetWinVersionString(); print "\nOS Name:\t\t " . Win32::GetOSName(); print "\nMinutes since reboot:\t " . int( Win32::GetTickCount() / 1000 / 60 ); print "\nAccount:\t\t " . ( Win32::IsAdminUser()? "administrator" : "non-administrator" ); print "\nLogin name:\t\t ". Win32::LoginName(); print "\nNetwork name:\t\t ". Win32::NodeName(); print "\nDomain name:\t\t ". Win32::DomainName(); print "\nCPU chip:\t\t ". Win32::GetChipName(); print "\nPerl build number:\t " . Win32::BuildNumber(); print "\n\nProgram Files folder:\t " . Win32::GetFolderPath( Win32::CSIDL_PROGRAM_FILES ); print "\nWindows folder:\t\t " . Win32::GetFolderPath( Win32::CSIDL_WINDOWS );


Wynik dzialania

Dodatkowe informacje

Link do oryginalnej strony z dokumentacja w CPANie

Autor modulu i kontakt do niego

Brak danych.

Kontakt i informacje o autorze opracowania

Autor: WS

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Wyklady
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.