Moduł Win32
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis tresci
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