Comment définir une nouvelle fonction et lancer celle-ci à partir de Windows PowerShell®
L’exemple suivant démontre comment contacter une fonction externe de l’API Windows via Windows PowerShell® afin d’obtenir le numéro d’identification de la fenêtre courante de PowerAMC
Pour ce faire nous allons créer un fichier « ObtenirFenetreID.ps1 » en copiant le code ci-dessous :
$signature=@'
[DllImport("user32.dll",SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
public static IntPtr GetWindow(string windowName){
return FindWindow(null,windowName);
}
'@
Add-Type -memberDefinition $signature -name "GUI" -namespace PD -passThru
$pd = new-object -com poweramc.application
start-sleep 2
[PD.GUI]::GetWindow("PowerAMC")
Obtenir le numéro d’identification de la fenêtre courante de PowerAMC :
- Vous lancez PowerAMC ;
- Vous inscrivez au niveau de la ligne de commande de Windows PowerShell® la commande « ObtenirFenetreID.ps1 » <Retour> et vous allez obtenir comme information le numéro d’identification de la fenêtre. Exemple : 34100366 ;
- Si vous fermez PowerAMC et que vous lancez à nouveau « ObtenirFenetreID.ps1 » <Retour> vous constaterez que le numéro d’identification de la fenêtre qui est retourné est à 0 compte tenu que la fonction n’est pas en mesure de trouver une fenêtre active de PowerAMC.
Explications du code en détails
- La variable « $signature » permet de conserver la définition de la fonction qui se trouve entre « @' » and « ‘@ ».
- [DllImport(« user32.dll »,SetLastError = true)]
- DllImport permet de requérir le chargement du DLL « user32.dll » dans Windows PowerShell
- La fonction « FindWindow » est défini dans le DLL « user32.dll »
- On déclare le prototype de la fonction externe selon la syntaxe C#. Exemple : public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- On définit notre fonction selon la syntaxe C#.
- public static IntPtr GetWindow(string windowName){return FindWindow(null,windowName);
- On ajoute notre nouvel objet dans Windows PowerShell avec le type de nom « GUI » et l’espace de nom « PD »
- Add-Type -memberDefinition $signature -name « GUI » -namespace PD -passThru
- On lance via Windows PowerShell PowerAMC
- $pd = new-object -com poweramc.application
- On lance la commande de repos afin de donner assez de temps à PowerAMC pour démarrer
- On appel la nouvelle fonction « GetWindow » en spécifiant l’espace de nom et son type et en passant en paramètre le nom de la fenêtre à trouver « PowerAMC »
- [PD.GUI]::GetWindow(« PowerAMC »)