Question [Résolu] Utilisation des DLL Windows
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 2 mois #8529
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Utilisation des DLL Windows
noel écrit:
Perso dans ce cas j'utilise directement C# ou une langage natif Win32 .
Ce serait bien que la console de la v3 propose une telle gestion des messages windows, on peut rêver
Pour les tâches de bases, c'est superflu, mais dés qu'on commence à vouloir gérer des tâches hors du commun, cela devient rapidement tordu, voir limite bricolage.
Par exemple, essayer, sur W2k8, de faire communiquer deux process PowerShell (sans utiliser les msg WMI).
Il reste possible de passer par WCF . Bon une fois arrivé là, il faut juste se demander si PS est adapté au besoin
...
Oui, mais là tu \"triches\" un peu, car une winform, au contraire d'une console, propose une boucle de message ( WdnProc ).Cela peut être une piste pour éviter les callback impossibles, la seule que j'ai trouvé à ce jour.
Perso dans ce cas j'utilise directement C# ou une langage natif Win32 .
Ce serait bien que la console de la v3 propose une telle gestion des messages windows, on peut rêver
Pour les tâches de bases, c'est superflu, mais dés qu'on commence à vouloir gérer des tâches hors du commun, cela devient rapidement tordu, voir limite bricolage.
Par exemple, essayer, sur W2k8, de faire communiquer deux process PowerShell (sans utiliser les msg WMI).
Il reste possible de passer par WCF . Bon une fois arrivé là, il faut juste se demander si PS est adapté au besoin
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- blanc
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 54
- Remerciements reçus 0
il y a 15 ans 2 mois #8531
par blanc
Réponse de blanc sur le sujet Re:Utilisation des DLL Windows
bonsoir,
C'est vrai que mon \"machin\" fait super bidouille.
Juste pour dire qu' avec le dot.net 2 (VS C# 2005) et 3.5 (VS C# 2008) et +, le compilateur est là !
Et il suffit de notepad, d'internet, d'une souris pour le copier/coller, et quand on ferme notepad, on compile avec csc.exe. Pour le(s) trouver, faire un [code:1]gci -i csc.exe -r $env:windir[/code:1]
csc /? peut faire peur.
Pour un petit bout de code (console) C#, on fait juste \"cd c:\temp puis \"le bon path\"\csc prg.cs\" et le prg.exe est généré. Je n'ai jamais pu le faire générer là où je voulais en utilisant la ligne de commande mais c'est pas un vrai problème pour juste bidouiller.
Bon, ca fait pas de pub pour PS, tout ça. Et j'ai pas encore fini de lire le livre de gauche et de base.
C'est vrai que mon \"machin\" fait super bidouille.
Juste pour dire qu' avec le dot.net 2 (VS C# 2005) et 3.5 (VS C# 2008) et +, le compilateur est là !
Et il suffit de notepad, d'internet, d'une souris pour le copier/coller, et quand on ferme notepad, on compile avec csc.exe. Pour le(s) trouver, faire un [code:1]gci -i csc.exe -r $env:windir[/code:1]
csc /? peut faire peur.
Pour un petit bout de code (console) C#, on fait juste \"cd c:\temp puis \"le bon path\"\csc prg.cs\" et le prg.exe est généré. Je n'ai jamais pu le faire générer là où je voulais en utilisant la ligne de commande mais c'est pas un vrai problème pour juste bidouiller.
Bon, ca fait pas de pub pour PS, tout ça. Et j'ai pas encore fini de lire le livre de gauche et de base.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 15 ans 2 mois #8532
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Utilisation des DLL Windows
noel écrit:

Le plus gênant, à mes yeux, est que PS est outil d'automatisation de tâches permettant de s'affranchir d'un GUI, mais comment automatiser le GUI utilisée pour automatiser
On pourrait masquer la fenêtre de la console et celle du GUI.
Mais ensuite comment envoyer un message de rétablissement ou de fermeture? Sacré PS !
En ce moment je rencontre ce type de pb, je dois utiliser un eventlog dédié dans une session puis je m'abonne à l'evénement EntryWritten de cet eventlog dans une autre session. Comme je ne peux utiliser WMI, je n'ai pas trouvé mieux en natif. Il y a bien WinRM mais cela nécessite que les deux session soient tjr active, ce qui n'est pas mon cas.
On peut ouvrir un magasin de bricolage, si tu veux
noel écrit:
C'est une solutionC'est vrai que mon \"machin\" fait super bidouille.
Le plus gênant, à mes yeux, est que PS est outil d'automatisation de tâches permettant de s'affranchir d'un GUI, mais comment automatiser le GUI utilisée pour automatiser
On pourrait masquer la fenêtre de la console et celle du GUI.
Mais ensuite comment envoyer un message de rétablissement ou de fermeture? Sacré PS !
En ce moment je rencontre ce type de pb, je dois utiliser un eventlog dédié dans une session puis je m'abonne à l'evénement EntryWritten de cet eventlog dans une autre session. Comme je ne peux utiliser WMI, je n'ai pas trouvé mieux en natif. Il y a bien WinRM mais cela nécessite que les deux session soient tjr active, ce qui n'est pas mon cas.
On peut ouvrir un magasin de bricolage, si tu veux
noel écrit:
En v2 on peut aussi utiliser Add-Type ( génération d'assemblies à la volée à l'aide de codeDom).on compile avec csc.exe.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 15 ans 2 mois #8540
par Arthur
Réponse de Arthur sur le sujet Re:Utilisation des DLL Windows
EDIT : Bug firefox
<br><br>Message édité par: bilbao, à: 11/01/11 17:42
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
-
Réduire
Plus d'informations
- Messages : 226
- Remerciements reçus 0
il y a 15 ans 2 mois #8541
par Arthur
Réponse de Arthur sur le sujet Re:Utilisation des DLL Windows
Voilà l'utilisation de SetTimer en Powershell enfin c'est surtout du C#, malheureusement je ne voit pas comment appeler une fonction powershell de cette façon...
Sauf peut être en créant un runspace powershell dans le code C# et....puis non en fait.
Le code envoie 10 messages puis s'arrête.
Il ne marche pas dans PowerGUI.
Sinon j'ai aussi découvert un article intéressant sur les timer : www.codeproject.com/KB/system/timers_intro.aspx#MMTimers
[code:1]$code = @\"
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
public class TestTimer
{
private delegate void TimerProc(IntPtr hWnd, uint uMsg, uint idEvent, uint dwTime);
private struct POINT
{
public int X;
public int Y;
}
private struct MSG
{
public IntPtr hwnd;
public uint message;
public uint wParam;
public uint lParam;
public uint time;
public POINT pt;
}
[DllImport(\"user32\", SetLastError = true)]
private static extern uint SetTimer(IntPtr hWnd, uint nIDEvent, uint uElapse, TimerProc lpTimerFunc);
[DllImport(\"user32\", SetLastError = true)]
private static extern bool KillTimer(IntPtr hWnd, uint nIDEvent);
[DllImport(\"user32\", SetLastError = true)]
private static extern bool GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
[DllImport(\"user32\", SetLastError = true)]
private static extern int DispatchMessage(ref MSG lpMsg);
public static void SendMessage()
{
TimerProc lpTimerFunc = TimerFunc;
uint nIDEvent = SetTimer(IntPtr.Zero, 0, 1500, lpTimerFunc);
if (nIDEvent != 0)
{
int i = 0;
MSG msg;
while (i <= 10)
{
GetMessage(out msg, IntPtr.Zero, 0, 0);
DispatchMessage(ref msg);
i++;
}
Console.WriteLine(\"Killing Timer\"«»);
Console.WriteLine(\"Kill Result: {0}\", KillTimer(IntPtr.Zero, nIDEvent));
}
}
static void TimerFunc(IntPtr hWnd, uint uMsg, uint idEvent, uint dwTime)
{
Console.WriteLine(\"Test\"«»);
}
}
\"@
Add-Type -TypeDefinition $code
[TestTimer]::«»SendMessage();[/code:1]<br><br>Message édité par: bilbao, à: 11/01/11 17:46
Sauf peut être en créant un runspace powershell dans le code C# et....puis non en fait.
Le code envoie 10 messages puis s'arrête.
Il ne marche pas dans PowerGUI.
Sinon j'ai aussi découvert un article intéressant sur les timer : www.codeproject.com/KB/system/timers_intro.aspx#MMTimers
[code:1]$code = @\"
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
public class TestTimer
{
private delegate void TimerProc(IntPtr hWnd, uint uMsg, uint idEvent, uint dwTime);
private struct POINT
{
public int X;
public int Y;
}
private struct MSG
{
public IntPtr hwnd;
public uint message;
public uint wParam;
public uint lParam;
public uint time;
public POINT pt;
}
[DllImport(\"user32\", SetLastError = true)]
private static extern uint SetTimer(IntPtr hWnd, uint nIDEvent, uint uElapse, TimerProc lpTimerFunc);
[DllImport(\"user32\", SetLastError = true)]
private static extern bool KillTimer(IntPtr hWnd, uint nIDEvent);
[DllImport(\"user32\", SetLastError = true)]
private static extern bool GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);
[DllImport(\"user32\", SetLastError = true)]
private static extern int DispatchMessage(ref MSG lpMsg);
public static void SendMessage()
{
TimerProc lpTimerFunc = TimerFunc;
uint nIDEvent = SetTimer(IntPtr.Zero, 0, 1500, lpTimerFunc);
if (nIDEvent != 0)
{
int i = 0;
MSG msg;
while (i <= 10)
{
GetMessage(out msg, IntPtr.Zero, 0, 0);
DispatchMessage(ref msg);
i++;
}
Console.WriteLine(\"Killing Timer\"«»);
Console.WriteLine(\"Kill Result: {0}\", KillTimer(IntPtr.Zero, nIDEvent));
}
}
static void TimerFunc(IntPtr hWnd, uint uMsg, uint idEvent, uint dwTime)
{
Console.WriteLine(\"Test\"«»);
}
}
\"@
Add-Type -TypeDefinition $code
[TestTimer]::«»SendMessage();[/code:1]<br><br>Message édité par: bilbao, à: 11/01/11 17:46
Connexion ou Créer un compte pour participer à la conversation.
- sokai
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 15 ans 2 mois #8544
par sokai
Réponse de sokai sur le sujet Re:Utilisation des DLL Windows
Salut à tous,
Voila je viens de tester ta solution Bilbo et ça marche !
Merci bcp pour ton exemple !
Voila je viens de tester ta solution Bilbo et ça marche !
Merci bcp pour ton exemple !
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.097 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- [Résolu] Utilisation des DLL Windows