Powerd911 – Numéro #1 au Canada

Comment utiliser Microsoft PowerShell® afin d’automatiser des actions dans PowerAMC

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 :
  1. Vous lancez PowerAMC ;
  2. 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 ;
  3. 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
    • start-sleep 2
  • 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”)

Laisser un commentaire