Script de verrouillage à distance d'un écran sous Windows 7

J'ai été rappelé dans ce sens par l'auteur d'un script que j'ai utilisé pour un couple d'années maintenant.

Il permet le verrouillage à distance d'un ordinateur de bureau, et fonctionne très bien en local et à distance sous Windows XP, et fonctionne très bien en local sous Windows 7, mais lorsque j'essaie de l'utiliser à distance sur une machine Windows 7 il ne fonctionne pas.
Il a été pour quelques années maintenant et a été très utile, mais nous avons récemment commencé à déployer Windows 7 machines sur site et une fois la mise à niveau est terminée, je ne vais pas être en mesure d'utiliser plus de cette façon.

La même question que j'ai posée il y a deux ans, mais est restée sans réponse.
Voici le code VBS:

' StartProcess.vbs
' Sample VBScript to start a process. Inputbox for name
' Author Guy Thomas http://computerperformance.co.uk/
' Version 2.2 - December 2005
' -------------------------------------------------------'
Option Explicit
Dim objWMIService, objProcess
Dim strShell, objProgram, strComputer, strExe, strInput
strExe = "rundll32.exe user32.dll,LockWorkStation"
' Input Box to get name of machine to run the process
Do
strComputer = (InputBox(" ComputerName to Run Script",_
"Computer Name"))
If strComputer <> "" Then
strInput = True
End if
Loop until strInput = True

' Connect to WMI
set objWMIService = getobject("winmgmts://"_
& strComputer & "/root/cimv2")
' Obtain the Win32_Process class of object.
Set objProcess = objWMIService.Get("Win32_Process")
Set objProgram = objProcess.Methods_( _
"Create").InParameters.SpawnInstance_
objProgram.CommandLine = strExe

'Execute the program now at the command line.
Set strShell = objWMIService.ExecMethod( _
"Win32_Process", "Create", objProgram)

'WScript.echo "Created: " & strExe & " on " & strComputer
WSCript.Quit
' End of Example of a Process VBScript
Que le code VBS n'a jamais vraiment "travaillé" à la première place. Rundll32.exe n'a jamais été destiné à appeler l' LockWorkStation fonction, car il a le tort de signature. C'est maintenant le bon moment pour le fixer.
Merci pour le lien et modifier Cody, j'ai vu des gens en disant d'appeler rundll32 pour ce n'était pas une bonne idée, mais ne comprenais pas pourquoi jusqu'à présent.
Gris: LockWorkStation ne nécessite pas de paramètres, de sorte qu'il ne serait pas l'esprit si rundll32.exe passe plus de paramètres que nécessaire.
"Microsoft eux-mêmes" (quoi que cela signifie, comme si elles étaient une sorte d'entité qui parle avec une voix singulière dans tous publié des extraits de code et blog) pourrait avoir recommandé, mais c'est encore faux. Le fait qu'elle "fonctionne" c'est parce que les efforts inlassables de la rétro-compatibilité des camps. Il ne fait pas beaucoup de bien "un accord de principe" avec quelque chose, mais le faire de toute façon. C'est une fracture, en état de mort cérébrale solution, et si vous comprenez pourquoi ça ne fonctionne pas (c'est à dire, lire l'article je me suis lié d'abord), vous n'avez pas veux pour l'utiliser. C'est décevant de lire les commentaires ignorants.
La vraie solution n'est pas vraiment accessible à partir de VBScript (je ne pense pas, j'ai peut-être tort) parce que vous ne pouvez pas appeler les fonctions API de Windows à partir de VBScript (ce que je sais pour certains). La meilleure chose que vous pourriez faire serait d'écrire un petit programme d'enveloppe dans une autre langue, et juste l'exécuter. Il ne serait pas aussi facile de modifier le script, mais pourquoi auriez-vous besoin de faire cela? Si vous connaissez le C++ ou le C#, ce serait un bon choix. Mais si vous ne connaissez VBScript, vous pouvez aussi l'écrire en VB 6—la syntaxe est presque identique. Écrire une fois, d'utiliser de nombreuses fois. Parfaitement légal, et il fonctionne toujours.

OriginalL'auteur Pingu_Pi | 2012-01-10