Project

General

Profile

PackageWindowsFunctions

Ce script contient des appels d'API Win32 à l'aide de P/Invoke dotnet. Il est dépendant de la fonction Invoke-Win32.
Je tiens à remercier Medinoc pour ses précisions sur les transformations du typage C vers .net.

Quelques exemples de fonctionnalités proposées.

Les fonctions contenues dans ce script n'ont pas été testées sous x64.

La liste des fonctions Windows implémentées.

Variable Globale : $PsWindowHandle (Référence le handle de la fenêtre de la console de la session PowerShell active)

Dependances : PackageSyntheticObject

Limite d'usage.

Pour l'appel suivant

  $ret=SetActiveWindow $WindowHandle
   If ($ret -eq $null)
...

$ret contient un pointeur qui ne peut être comparé avec la valeur $Null de PowerShell mais seulement avec [intPtr]::Zero ou 0.
Dans ce contexte le $null de PowerShell n'est pas identique au null du C#.

Certaines API peuvent nécessiter de manipuler des ressources non-managées, assurer vous dans ce cas de libérer ces ressources non-managées. :

  #Change le texte du titre de la fenêtre Notepad
Notepad.exe
$Process=Get-Process Notepad
$Msg = "Mon nouveau titre" 
Sleep 1

 #conversion de String vers intPtr
$Ptr= [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($Msg)
SendMessage $Process.MainWindowHandle $cApiWindows.WM_SETTEXT 0 $Ptr| out-null
 #Libération de la mémoire non-managée
[System.Runtime.InteropServices.Marshal]::FreeHGlobal($Ptr) 

La gestion des erreurs Win32 des appels effectués par la fonction Invoke-Win32 n'est pas possible pour le moment.