Question Exécuter du code lors d'une msgbox (popup) !

Plus d'informations
il y a 16 ans 4 mois #5513 par neo673
Bonjour à tous ! B)

J'aimerais afficher à l'écran une pop-up disant à l'utilisateur qu'une configuration est en cours. A ce moment, la messagebox reste affichée mais rend la main à la suite du code et arrête de s'afficher à la fin du code.

J'en suis la niveau code :
[code:1]$WshShell = New-Object -ComObject Wscript.Shell
$Answer = $WshShell.Popup(\"Paramètrage de Windows 7 en cours... \", 3, \"Windows 7 Tuning\",0)
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
{$WshShell.Run(\"%WINDIR%\regedit.exe /s \\xxxxxxxxxx.reg\"«»)}
[/code:1]

Alors la ce qu'il fait c'est qu'il affiche la pop-up 3 secondes sans rien faire et après il exécute mes fichiers de registre :pinch:
Ne serait-ce pas possible d'éxecuter la msgbox sans qu'elle s'enlève et de passer à la suite du code et la supprimer ensuite ? :huh:

Merci pour votre précieuse aide !

Message édité par: neo673, à: 22/10/09 16:39<br><br>Message édité par: neo673, à: 22/10/09 16:40

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 4 mois #5515 par Laurent Dardenne
Salut
neo673 écrit:

Alors la ce qu'il fait c'est qu'il affiche la pop-up 3 secondes sans rien faire et après il exécute mes fichiers de registre

L'objet que tu utilises fait ce que tu lui demandes.
neo673 écrit:

Ne serait-ce pas possible d'éxecuter la msgbox sans qu'elle s'enlève et de passer à la suite du code et la supprimer ensuite ?

Tu dois adopter une autre approche, car ici l'objet que tu utilises n'est pas appropié.
neo673 écrit:

J'aimerais afficher à l'écran une pop-up disant à l'utilisateur qu'une configuration est en cours. A ce moment, la messagebox reste affichée mais rend la main à la suite du code et arrête de s'afficher à la fin du code.

Le mieux est d'utiliser une Winform, une possible solution :
[code:1]
################################################################################
#
# Nom : Form1.ps1
# Version : 0.1
# Auteur :
# Date : le 22/10/2009
#
# Généré sous PowerShell V1.0.0.0
# Appel : &amp;\&quot;$($AddLib.Scripts)\Convert-Form\Convert-Form.ps1\&quot; Form1.Designer.cs
@\&quot;
Historique :
(Soit substitution CVS)
$Log$
(soit substitution SVN)
$LastChangedDate$
$Rev$
\&quot;@&gt;$Null
#
################################################################################

# Chargement des assemblies externes
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Windows.Forms\&quot;«»)
[void][Reflection.Assembly]::LoadWithPartialName(\&quot;System.Drawing\&quot;«»)

$lbMessage = new-object System.Windows.Forms.Label
#
# lbMessage
#
$lbMessage.AutoSize = $true
$lbMessage.Font = new-object System.Drawing.Font(\&quot;Microsoft Sans Serif\&quot;, 15.25,[System.Drawing.FontStyle]::Bold,[System.Drawing.GraphicsUnit]::«»Point, 0)
$lbMessage.Location = new-object System.Drawing.Point(55, 32)
$lbMessage.Name = \&quot;lbMessage\&quot;
$lbMessage.Size = new-object System.Drawing.Size(132, 25)
$lbMessage.TabIndex = 0
$lbMessage.Text = \&quot;Patientez...\&quot;
#
$FrmMain = new-object System.Windows.Forms.form
#
$FrmMain.ClientSize = new-object System.Drawing.Size(292, 127)
$FrmMain.Controls.Add($lbMessage)
$FrmMain.Name = \&quot;FrmMain\&quot;
$FrmMain.StartPosition =[System.Windows.Forms.FormStartPosition]::CenterScreen
$FrmMain.Text = \&quot;Traitement en cours\&quot;
$FrmMain.TopMost = $true

function OnFormClosing_FrmMain{
# $this est égal au paramètre sender (object)
# $_ est égal au paramètre e (eventarg)

# Déterminer la raison de la fermeture :
# if (($_).CloseReason -eq [System.Windows.Forms.CloseReason]::UserClosing)

#Autorise la fermeture
($_).Cancel= $False
}
$FrmMain.Add_FormClosing( { OnFormClosing_FrmMain} )

$sbTraitement={
$FrmMain.Refresh()
1..10|Foreach {Write-Host \&quot;Traitement $_\&quot;;Sleep 10}
# regedit.exe /s \\xxxxxxxxxx.reg
# ou
# &amp;$env:WINDIR\regedit.exe /s \\xxxxxxxxxx.reg
$FrmMain.Close()
}

$FrmMain.Add_Shown({$FrmMain.Activate();&amp;$sbTraitement})

#Active la fenêtre et exécute le traitement
$ModalResult=$FrmMain.ShowDialog()
#Libération de la Form
$FrmMain.Dispose()
[/code:1]
Reste que si l'utilisateur clique sur une autre fenêtre et reviens sur la console, le résultat n'est pas très convainquant.
Ensuite tu peux exécuter le programme regedit directement sous la console PowerShell.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 16 ans 4 mois #5570 par neo673
Waouw :P
La ce n'est plus du scripting de débutant B)

Etant donné que je n'ai que quelques valeurs de registre à modifier, tant pis je laisserai juste une pop-up de quelques secondes afin d'avertir l'utilisateur et mes valeurs registre seront modifiés ensuite.

Je te remercie vivement en tout cas pour le temps passé pour réaliser ce script ! :whistle:

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.044 secondes
Propulsé par Kunena