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