Alternatywna wersja protipa
aptm.in/protip/0082 czyli blokowania ekranu PowerShellem. Różnica polega na tym, że zamiast tworzyć nową klasę cmdletem
Add-Type
z kodem źródłowym przekazanym do parametru
-TypeDefinition
, wykorzystujemy parametr
-MemberDefinition
(w skrócie
-m
), który pozwoli nam uzyskać dostęp do natywnych ("niezarządzalnych" -
ang. unmanaged) funkcji biblioteki napisanej w dowolnym języku. Dla chcących zgłębić temat, wykorzystywany jest mechanizm
P/Invoke.
Parametr
-pas
czyli
-PassThru
spowoduje, że
Add-Type
zwróci nam obiekt reprezentujący dodane typy, przec co możemy od razu się do niego odwołać (
::LockWorkStation()
) bez konieczności tworzenia dodatkowej zmiennej.
Być może nieco bardziej czytelną formą będzie:
$sig = '[DllImport("user32.dll")]public static extern bool LockWorkStation();'
$User32LockWorkStation = Add-Type -MemberDefinition $sig -Name "Lock" -PassThru
$User32LockWorkStation::LockWorkStation()
Ponownie warto pamiętać, że w tle uruchomi się kompilator
csc.exe
, zgodnie z tym co omawialiśmy przy okazji protipa
aptm.in/protip/007f.
Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.