Question
peut on gérer des événements (connectobjet du vbs)
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 54
- Remerciements reçus 0
En vbs, on peut utiliser connectobject pour faire qu'un objet (imapi par exemple) rappelle une fonction du script. Voir msdn.microsoft.com/en-us/library/aa366443%28VS.85%29.aspx
dont voici un court extrait :
[code:1]
Set dataWriter = CreateObject (\"IMAPI2.MsftDiscFormat2Data\"«»)
' Attach event handler (see the DDiscFormat2DataEvents interface).
' The \"dwBurnEvent_\" parameter identifies the handler (see the
' dwBurnEvent_Update subroutine).
WScript.ConnectObject dataWriter, \"dwBurnEvent_\"
' Event handler for the MsftDiscFormat2Data.Write method.
' For details of the subroutine's parameters, see the
' DDiscFormat2DataEvents::Update method.
SUB dwBurnEvent_Update( byRef object, byRef progress )
' --- Other code occurs here.
END SUB[/code:1]
En powershell, on peut recevoir des \"event\" de wpf, avec les boutons par exemple comme :
[code:1]
$button_OnClick=
{
#TODO: Place custom script here
}
$button = New-Object System.Windows.Forms.Button
$button.add_Click($button_OnClick)[/code:1]
Au passage, pourquoi une variable et pas le mot clé \"function\"? Ce bout d'exemple est tiré de PrimalForm.
Donc comment écrire le script pour que l'objet dataWriter appelle la fonction \"update\" du script?
J'ai risqué un oeil sur msdn et dot.net mais je me suis perdu en route. Trop compliqué.
Merci d'avance.<br><br>Message édité par: Arnaud, à: 25/11/09 10:17
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Désolé j'ai pas pu résister en ces temps qui courrent
Je n'ai pas bien compris tes questions dans ton post. Peux-tu être un peu plus précis stp ?
Si c'est par rapport au \"binding\" avec les Windows forms, une petite recherche dans le forum et tu devrais trouver ton bonheur...
L'exemple que tu donnes est basé sur WinForms il me semble et non pas sur WPF, car Primal Forms ne genère pas encore de WPF.
Cordialement,
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
noel écrit:
C'est le contenu de la variable qu'il faut voir, elle contient un scriptblock qui peut être casté en un eventhandler dotnet .Au passage, pourquoi une variable et pas le mot clé \"function\"?
C'est du PowerShell, c'est comme ça...
noel écrit:
D'après ce lien Technet ce n'est pas possible sous PowerShell V1 mais avec la v2.Donc comment écrire le script pour que l'objet dataWriter appelle la fonction \"update\" du script?
Il faut une boucle de message pour gérer les événements.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- blanc
- Auteur du sujet
- Hors Ligne
- Membre senior
-
- Messages : 54
- Remerciements reçus 0
Pour Arnaux, je suis né le 25 décembre, c'est pas une blague. Et mon nom, c'est Blanc. Ca ne s'invente pas. Mais je m'y suis fait.
heu, désolé d'avoir écrit sans vérifier des notions et des termes trop neufs pour moi. WinForm du Dot.net2 et non pas WPF dont à part le sigle....
Je ne perds pas mon but de vue : faire en PS comme en VBS avec connectObjet qui permet de demander à un objet d'appeler une fonction du script. Je ne sais pas trop comment cela se passe en VBS, mais cela marche si l'objet COM s'y prête, les \"sink\" de WMI en sont un autre exemple.
Pour les winforms, ayant un peu développé en SDK en C, je comprends qu'il faille une boucle de lecture des messages \"WM_\". Je vais approfondir binding et eventhandler du dotnet et au moins relire MSDN.
Juste un lien qui présente comment utiliser un autre formalisme qui emploie le mot clé \"function\" pour traiter un \"event\" de fenêtre : www.techotopia.com/index.php/Creating_GU...ll_1.0_with_WinForms
C'est assez déroutant pour un débutant, les divers formalismes, les accolades à employer...Mais bon. Faut bien s'y mettre.
Mais quel joie pour un débutant de voir qu'avec PS on peut faire de belles boîtes, avec des boutons, tout comme en VB, mais sans l'outil primalform (ou un équivalent) je n'y serais jamais arrivé.
J'avais déjà lu le lien de technet, c'est d'ailleurs pour cela que j'ai posté ici. Mais je n'ai rien trouvé dans ce site.
Sur celui ci blogs.msdn.com/powershell/archive/2008/0...handling-events.aspx
il y a peut être un début avec lequel je peux \"réfléchir\" ce soir :
$window = New-Object Windows.Window
$eventHandler = [Windows.Input.MouseButtonEventHandler]{$this.Close()}
$window.Add_MouseDown($eventHandler)
Si je prends le bon objet IMAPI, que je \"caste\" avec le bon type, pour IMAPI (c'est pas gagné car je ne comprends pas que les noms changent entre C#, C++ et les \"scripts\"), peut être que l'objet appellera la fonction du script.
Pour résumé mon objectif, je voudrais écrire au moins une fois un script PS qui contient une fonction qu'un objet se propose d'appeler. Comme exemple, j'utilise IMAPI V2 qui permet de graver des DVD, de les formater, et de visualiser l'avancement via la \"callback du client\" que l'objet appelle pour cela. En C#, C++, VBS, ca marche. Mais en PS...
Merci
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Et comment faire s'il n'en existe pas sous PowerShell ? De ce que j'ai compris :Pour les winforms, ayant un peu développé en SDK en C, je comprends qu'il faille une boucle de lecture des messages \"WM_\".
on est obligé d'utiliser du C# pour dériver la méthode Wdnproc,
la gestion des événements dans la version 2 de PowerShell ne gére que des délégués dotnet et pas de messages des API Win32.
noel écrit:
Si tu parles de ceci :Juste un lien qui présente comment utiliser un autre formalisme qui emploie le mot clé \"function\" pour traiter un \"event\" de fenêtre
[code:1]
$button.add_click({do_exit})
[/code:1]
Cela reste un scriptblock qui appel une fonction, on ne peut pas faire ceci :
[code:1]
$button.add_click(do_exit)
[/code:1]
Une fonction n'est pas un eventhandler.
noel écrit:
Oui, mais pas plus que le CC'est assez déroutant pour un débutant,
noel écrit:
Je ne pense pas, c'est la signature d'un eventhandler \"classique\" d'un composant :il y a peut être un début avec lequel je peux \"réfléchir\" ce soir :
[code:1]
public delegate void MouseButtonEventHandler(
Object sender,
MouseButtonEventArgs e
)
[/code:1]
Retour à la case départ...
noel écrit:
Les callbacks dotnet ne sont pas gérés nativement même sous la v2.Pour résumé mon objectif, je voudrais écrire au moins une fois un script PS qui contient une fonction qu'un objet se propose d'appeler. Comme exemple, j'utilise IMAPI V2 qui permet de graver des DVD, de les formater, et de visualiser l'avancement via la \"callback du client\" que l'objet appelle pour cela. En C#, C++, VBS, ca marche. Mais en PS...
Voir aussi, ce lien , et dans une moindre mesure celui-ci .
Ce qu'il faut comprendre c'est que PowerShell n'est pas un langage de programmation, c'est un shell puissant mais limité sur ce type de traitement.
C'est peut être possible mais en utilisant un assembly encapsulant les interface COM de IMAPI .
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Par contre une piste qui peut peut-être servir est la commande Add-Type de Powershell v2. En effet grâce à cette dernière, on peut appeller du code C#, VisualBasic ou JScript.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- peut on gérer des événements (connectobjet du vbs)