Question [Résolu] Utilisation des DLL Windows

Plus d'informations
il y a 15 ans 2 mois #8529 par Laurent Dardenne
noel écrit:

Cela peut être une piste pour éviter les callback impossibles, la seule que j'ai trouvé à ce jour.

Oui, mais là tu \"triches\" un peu, car une winform, au contraire d'une console, propose une boucle de message ( WdnProc ).
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 :laugh:

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 :P ...

Tutoriels PowerShell

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

Plus d'informations
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.

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

Plus d'informations
il y a 15 ans 2 mois #8532 par Laurent Dardenne
noel écrit:

C'est vrai que mon \"machin\" fait super bidouille.

C'est une solution :)
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 :silly:
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 :P

noel écrit:

on compile avec csc.exe.

En v2 on peut aussi utiliser Add-Type ( génération d'assemblies à la volée à l'aide de codeDom).

Tutoriels PowerShell

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

Plus d'informations
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 :pinch:<br><br>Message édité par: bilbao, à: 11/01/11 17:42

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

Plus d'informations
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. :pinch:

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 = @\&quot;

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(\&quot;user32\&quot;, SetLastError = true)]
private static extern uint SetTimer(IntPtr hWnd, uint nIDEvent, uint uElapse, TimerProc lpTimerFunc);

[DllImport(\&quot;user32\&quot;, SetLastError = true)]
private static extern bool KillTimer(IntPtr hWnd, uint nIDEvent);

[DllImport(\&quot;user32\&quot;, SetLastError = true)]
private static extern bool GetMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax);

[DllImport(\&quot;user32\&quot;, 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 &lt;= 10)
{
GetMessage(out msg, IntPtr.Zero, 0, 0);
DispatchMessage(ref msg);
i++;
}

Console.WriteLine(\&quot;Killing Timer\&quot;«»);
Console.WriteLine(\&quot;Kill Result: {0}\&quot;, KillTimer(IntPtr.Zero, nIDEvent));
}
}

static void TimerFunc(IntPtr hWnd, uint uMsg, uint idEvent, uint dwTime)
{
Console.WriteLine(\&quot;Test\&quot;«»);
}
}

\&quot;@

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.

Plus d'informations
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 ! B)

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
Propulsé par Kunena