Question peut on gérer des événements (connectobjet du vbs)

Plus d'informations
il y a 16 ans 3 mois #5714 par blanc
bonjour,

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.

Plus d'informations
il y a 16 ans 3 mois #5718 par Arnaud Petitjean
Bonjour (père) Noel :laugh:,

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 \&quot;binding\&quot; 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.

Plus d'informations
il y a 16 ans 3 mois #5721 par Laurent Dardenne
Salut,
noel écrit:

Au passage, pourquoi une variable et pas le mot clé \&quot;function\&quot;?

C'est le contenu de la variable qu'il faut voir, elle contient un scriptblock qui peut être casté en un eventhandler dotnet .
C'est du PowerShell, c'est comme ça...
noel écrit:

Donc comment écrire le script pour que l'objet dataWriter appelle la fonction \&quot;update\&quot; du script?

D'après ce lien Technet ce n'est pas possible sous PowerShell V1 mais avec la v2.
Il faut une boucle de message pour gérer les événements.

Tutoriels PowerShell

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

Plus d'informations
il y a 16 ans 3 mois #5724 par blanc
bonjour,

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 \&quot;sink\&quot; 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 \&quot;WM_\&quot;. 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é \&quot;function\&quot; pour traiter un \&quot;event\&quot; 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 \&quot;réfléchir\&quot; 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 \&quot;caste\&quot; avec le bon type, pour IMAPI (c'est pas gagné car je ne comprends pas que les noms changent entre C#, C++ et les \&quot;scripts\&quot;), 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 \&quot;callback du client\&quot; 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.

Plus d'informations
il y a 16 ans 3 mois #5725 par Laurent Dardenne
noel écrit:

Pour les winforms, ayant un peu développé en SDK en C, je comprends qu'il faille une boucle de lecture des messages \&quot;WM_\&quot;.

Et comment faire s'il n'en existe pas sous PowerShell ? De ce que j'ai compris :
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:

Juste un lien qui présente comment utiliser un autre formalisme qui emploie le mot clé \&quot;function\&quot; pour traiter un \&quot;event\&quot; de fenêtre

Si tu parles de ceci :
[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:

C'est assez déroutant pour un débutant,

Oui, mais pas plus que le C ;-)
noel écrit:

il y a peut être un début avec lequel je peux \&quot;réfléchir\&quot; ce soir :

Je ne pense pas, c'est la signature d'un eventhandler \&quot;classique\&quot; d'un composant :
[code:1]
public delegate void MouseButtonEventHandler(
Object sender,
MouseButtonEventArgs e
)
[/code:1]
Retour à la case départ...
noel écrit:

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 \&quot;callback du client\&quot; que l'objet appelle pour cela. En C#, C++, VBS, ca marche. Mais en PS...

Les callbacks dotnet ne sont pas gérés nativement même sous la v2.
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.

Plus d'informations
il y a 16 ans 3 mois #5726 par Arnaud Petitjean
J'avoue que je n'ai jamais exploré ce domaine et que pour moi je jette l'éponge car on rentre là dans le domaine du developpement...

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.

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