További példák

Nézzünk néhány további példát a PInvoke lehetőségekre. Az első ezek között a LockWorkstation funkciót megvalósító függvény:

$code = '[DllImport("user32.dll", SetLastError = true)]

public static extern bool LockWorkStation();'

 

Add-Type -memberDefinition $code -name NativeMethod -namespace Win32

 

function Lock-Workstation {

     [Win32.NativeMethod]::LockWorkstation()

}

Ebben nem sok nehézség van, megint csak a user32.dll egyik szolgáltatását tudjuk igénybe venni immáron PowerShell segítségével is.

A következő függvény már egy kicsit összetettebb, hiszen itt paramétereket is át kell adni a SystemParametersInfo hívásakor a háttérképet beállító függvényünkben:

$code = @'

[DllImport("user32.dll")]

public static extern uint SystemParametersInfo(

    uint uiAction,

    uint uiParam,

    string pvParam,

    uint fWinIni);

'@

 

Add-Type -MemberDefinition $code -Name NativeMethod2 -Namespace Win32

 

function Set-WallPaper {

param($picturepath)

     [win32.NativeMethod2]::SystemParametersInfo(20, 0, $picturepath, 3)

}

Ez a SystemParametersInfo egyébként nagyon sok mindent tud, érdemes szétnézni a dokumentációjában, hiszen rengeteg hasznos rendszerbeállítást végezhetünk el segítségével.

A következő függvénnyel megkapjuk, hogy a gépünk érintés-vezérelt-e vagy sem:

function IsTouchCapable {   

    try{

        [void] [user32.method]

    }

    catch{   

        $code = '[DllImport("user32.dll")]

        public static extern int GetSystemMetrics(uint smIndex);'

        Add-Type -MemberDefinition $code -Name Method -Namespace User32

    }

 

    !![User32.Method]::GetSystemMetrics(95)

}

 Itt A GetSystemMetrics hívást használtam, ami szintén sok mindenre jó. Ebben a függvényben azt a módszert követtem, hogy belül végeztem el az Add-Type-al a típusdefiníciót, mégpedig úgy, hogy előbb ránézek egy try blokkban, hogy van-e már ilyen és ha nincs, akkor a catch-ben végrehajtom a típusdefiníciót.

 



Word To HTML Converter