Question [Résolu] Utilisation des DLL Windows

Plus d'informations
il y a 15 ans 2 mois #8498 par sokai
Bonjour,

Je n'arrive pas à trouver un tuto ou un site qui explique en détails comment utiliser les DLL windows comme User32.dll avec powershell.

Je voudrais savoir comment faire pour lister les fonctions/méthodes de ces DLL et ensuite comprendre comment faire appelle aux fonctions/méthode contenues dans ces DLL avec powershell.

Si quelqu'un à ça sous la main...
Ou en peu de temps pour des explications... ;)

Merci d'avance.<br><br>Message édité par: Arnaud, à: 17/01/11 09:02

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

Plus d'informations
il y a 15 ans 2 mois #8499 par Arthur
Réponse de Arthur sur le sujet Re:Utilisation des DLL Windows
Tu cherche à utilisé l'API Windows avec powershell ?
Pour ca faut passer par du code C# ou VB.net et le compiler sur Powershell un peu dans ce genre :

powershell-scripting.com/index.php?optio...iew=flat&catid=6

ou cherche API Windows Powershell sur google.

Sinon Laurent a développé quelques fonctions :

projets.developpez.com/projects/50/wiki/Function_Invoke-Win32

www.powershell-scripting.com/index.php?o...id=3156&catid=14

Tuto pour utiliser l'API windows en dotnet :

www.codeproject.com/KB/cs/c__and_api.aspx

www.c-sharpcorner.com/UploadFile/shrijee...5528AM/win32api.aspx

Message édité par: bilbao, à: 4/01/11 18:20<br><br>Message édité par: bilbao, à: 4/01/11 19:11

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

Plus d'informations
il y a 15 ans 2 mois #8500 par sokai
Réponse de sokai sur le sujet Re:Utilisation des DLL Windows
Merci bilbao. J'ai bien avancé grâce à tes liens , mais j'ai encore une petite question. ;)

Une fois les fonctions Win API accessibles, comment puis-je créer un pointeur sur une fonction pour le 4ème paramètres de l'exemple qui suit ? :huh:

UINT_PTR WINAPI SetTimer(
__in_opt HWND hWnd,
__in UINT_PTR nIDEvent,
__in UINT uElapse,
__in_opt TIMERPROC lpTimerFunc
);

De plus comment connaître exactement à quoi correspond les HWND, UINT, TIMERPROC, SHORT, DWORD etc... en powershell :dry: ?

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

Plus d'informations
il y a 15 ans 2 mois #8501 par Arthur
Réponse de Arthur sur le sujet Re:Utilisation des DLL Windows

Une fois les fonctions Win API accessibles, comment puis-je créer un pointeur sur une fonction pour le 4ème paramètres de l'exemple qui suit ?


Bonne question... :P
Je te conseil de mettre NULL.
sinon pour utiliser TimerProc regarde la :

www.codeproject.com/KB/cs/ftwin32timers.aspx

Mais en réfléchissant vite fait je trouve que ca complique sérieusement tout. :pinch:


Si j'ai bien tout saisi il faut créer une \&quot;TimerProc callback function\&quot; seulement powershell ne le fait pas(il me semble).

Si tu veux pour le \&quot;fun\&quot; utiliser quand même l'API, tu peux essayer de tout coder en C#, par exemple une méthode timer qui appelle une fonction Powershell à la fin.(je sait pas si je m'exprime bien, difficile à expliquer :pinch: )

Pourquoi ne pas tout simplement utiliser le timer dans .Net ou la cmdlet \&quot;Start-sleep\&quot; et si besoin est, créer un event pour appeler une fonction.

De plus comment connaître exactement à quoi correspond les HWND, UINT, TIMERPROC, SHORT, DWORD etc... en powershell ?


Regarde ici :

www.codegod.de/webappcodegod/Win32APIViewer.aspx?api=SetTimer

Si tu as besoin je peux t'expliquer un peu plus en détail l'utilisation de SetTimer en C#. (:P )

En tous cas, ca à l'air intéressant, je regarderai plus en détails cette fonction dans les prochains jours.

EDIT: il serait bon de préciser dans quel but/contexte tu veux utiliser SetTimer.<br><br>Message édité par: bilbao, à: 5/01/11 01:16

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

Plus d'informations
il y a 15 ans 2 mois #8519 par Laurent Dardenne
Salut,
sokai écrit:

comment puis-je créer un pointeur sur une fonction

Je ne pense pas que cela n'est pas possible.
sokai écrit:

De plus comment connaître exactement à quoi correspond les HWND, UINT, TIMERPROC, SHORT, DWORD etc... en powershell :dry: ?

Quelques liens ici :
projets.developpez.com/projects/add-lib/...WindowsFunctions.ps1

Lorsque j'ai portée ces APIs je me suis aussi aidé du code sources Delphi, pour vérifier la taille de chaque type. Les header C (*.h) sont aussi important (livrés avec le sdk Windows). Et puis [url=Médinoc
]Medinoc[/url], contributeur d'un forum Win32, m'a bien aidé.

Ensuite il y a qq types que PS ne gére pas ou mal, les entier non signé je crois.

Enfin le gros pb du portage des API sous PS est que tu ne peux pas utiliser Get-LastWin32Error, en tout cas pas avec de le code que j'utilisais.

Le mieux est de coupler du C# (Add-Type), voir de rechercher la classe C# correspondante si elle existe, sinon WMI propose également des timers.

Tu touches une des limites de PS...

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 2 mois #8527 par blanc
Réponse de blanc sur le sujet Re:Utilisation des DLL Windows
bonjour,
sans prétendre quoi que ce soit...
Et pour le cas très particulier d'un timer dans un script powershell.
J'ai utilisé une \&quot;form\&quot; générée avec primalform(free) pour gérer un petit automatisme d'installation avec un timer. Dans les grandes lignes (extrait de mon code de nouilles), ca donne ceci :
[code:1]
[void] [System.Reflection.Assembly]::LoadWithPartialName(\&quot;System.windows.forms\&quot;«»)
# les constantes des états en cours
$Etat= new-object system.collections.hashtable
$Etat.add(\&quot;TestInitialMstsc\&quot;, 0)
$Etat.add(\&quot;TestPing\&quot;, 10)
$Etat.add(\&quot;ReDemarreVM\&quot;, 20)
# la variable etat
$script:etatEnCours=$Etat.TestInitialMstsc
#region Make the form
$frmMain = new-object Windows.Forms.form
$frmMain.Size = new-object System.Drawing.Size @(800,600)
$frmMain.text = \&quot;Connexion à la machine virtuelle\&quot;
#intercepteur de clavier pour l'appui
$FrmMain.KeyPreview = $True
$FrmMain.Add_KeyDown({
# pour activer les logs...
if ($_.alt -and $_.KeyCode -eq \&quot;F1\&quot; ) {$script:modeLog=$true; $script:«»DateDebutLog=get-date; $slMessage.BackColor=\&quot;red\&quot;;$script:LogSizeMax = 10000000}
})
#
# Timer
#
$timer = new-object System.Windows.forms.timer
$timer.Interval = 1000
# progressBar1
#
$progressBar1 = new-object System.Windows.Forms.ProgressBar
# je ne sais pas faire moins sur l'axe des Y car picturebox réserve la place.
$progressBar1.Location = new-object System.Drawing.Point($(Xmult(300)), $(Ymult(420)))
$progressBar1.Name = 'progressBar1'
$progressBar1.Size = new-object System.Drawing.Size(190, 20)
$progressBar1.Value = 0
$progressbar1.style = 'continuous'
$progressbar1.step = 1

#
# statusStrip1
#
$statusStrip = new-object System.Windows.Forms.StatusStrip
$statusStrip.Location = new-object System.Drawing.Point(0, 310)
$statusStrip.Name = \&quot;statusStrip\&quot;
$statusStrip.Size = new-object System.Drawing.Size(150, 22);
$statusStrip.TabIndex = 1
$statusStrip.Text = \&quot;statusStrip\&quot;
#
# ajout des controls dans la Form1
#
$frmMain.Controls.Add($label1)
$frmMain.Controls.Add($progressBar1)
#
# la fct automate appelée par le timer
#
function script:testConnexion ($index){
switch ($script:etatEnCours){
{ $_ -eq $Etat.TestInitialMstsc } {
#logger \&quot;`t--&gt; TestInitialMstsc...$_\&quot;
}

{ $_ -eq $Etat.TestPing } {
#logger \&quot;`t--&gt; Test Ping...$_ `$script:Cpt = $script:Cpt\&quot;
}
# ...
}#fin du switch
}#fin de function

#
# la fct TIMER automate
#
$script:i=1
$timer.Add_Tick({
# on teste si la vm est prête à recevoir la commande mstsc pour ne pas avoir la msgbox d'erreur de mstsc
testConnexion $script:i
}) # fin scriptblock timer

$label1.Text = 'Installation en cours ...'
$timer.Start()
$FrmMain.Add_Shown({$FrmMain.Activate()})
[void]$FrmMain.showdialog()
[/code:1]
Juste pour montrer le cas du timer avec dot.net disponible depuis PS.
Le ...add_tick({...}) ne s'invente pas (faut lire les incontournables documents de Laurent Dardenne et de Janel, c'est long !)

Peut être à côté du besoin ...

Ps : Attention aux \&quot;ré-entrances\&quot; si une action est plus longue que le timer (faire stop et start timer dans la fct si besoin), y a des effets surprenants.
Cela peut être une piste pour éviter les callback impossibles, la seule que j'ai trouvé à ce jour.

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

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