Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Simuliert einen Tastendruck. Bei erfolgreicher Ausführung befindet sich der Schlüssel im Zustand "Down".
Syntax
uint32 PressKey(
[in] uint32 keyCode
);
Parameter
-
keyCode [in]
-
Typ: uint32
Der Virtuelle Schlüsselcode der zu drückenden Taste. Die Liste mit Codes für virtuelle Schlüssel finden Sie unter Virtual-Key Codes.
Rückgabewert
Typ: uint32
Ein Rückgabewert von 0 (null) gibt den Erfolg an. Ein Wert ungleich null gibt an, dass der Schlüsselzustand nicht geändert werden kann.
-
Abgeschlossen ohne Fehler (0)
-
Methodenparameter überprüft – Auftrag gestartet (4096)
-
Fehler (32768)
-
Zugriff verweigert (32769)
-
Nicht unterstützt (32770)
-
Status ist unbekannt (32771)
-
Timeout (32772)
-
Ungültiger Parameter (32773)
-
System wird verwendet (32774)
-
Ungültiger Status für diesen Vorgang (32775)
-
Falscher Datentyp (32776)
-
System ist nicht verfügbar (32777)
-
Nicht genügend Arbeitsspeicher (32778)
Bemerkungen
Die PressKey-Methode ordnet Verweise auf die VK_MENU (18), VK_CONTROL (17) und VK_SHIFT (16 ) VK_LMENU ( 164), VK_LCONTROL (162) und VK_LSHIFT (160) zu, da die VK_MENU, VK_CONTROL und VK_SHIFT virtuellen Tastencodes keine echten Tasten auf einer Tastatur darstellen.
Der Zugriff auf die Msvm_Keyboard-Klasse kann durch UAC-Filterung eingeschränkt werden. Weitere Informationen finden Sie unter Benutzerkontensteuerung und WMI.
Beispiele
Im folgenden C#-Beispiel wird ein Tastendruck simuliert. Die referenzierten Hilfsprogramme finden Sie unter Allgemeine Hilfsprogramme für die Virtualisierungsbeispiele (V2).
using System;
using System.Management;
namespace HyperVSamples
{
class PressKeyClass
{
static ManagementObject GetComputerKeyboard(ManagementObject vm)
{
ManagementObjectCollection keyboardCollection = vm.GetRelated
(
"Msvm_Keyboard",
"Msvm_SystemDevice",
null,
null,
"PartComponent",
"GroupComponent",
false,
null
);
ManagementObject keyboard = null;
foreach (ManagementObject instance in keyboardCollection)
{
keyboard = instance;
break;
}
return keyboard;
}
static void PressKey(string vmName, int keyCode)
{
ManagementScope scope = new ManagementScope(@"root\virtualization\v2", null);
ManagementObject vm = Utility.GetTargetComputer(vmName, scope);
ManagementObject keyboard = GetComputerKeyboard(vm);
ManagementBaseObject inParams = keyboard.GetMethodParameters("PressKey");
inParams["keyCode"] = keyCode;
ManagementBaseObject outParams = keyboard.InvokeMethod("PressKey", inParams, null);
if ((UInt16)outParams["ReturnValue"] == ReturnCode.Completed)
{
string.Format("Key {0} was pressed on {1}", keyCode, vm["ElementName"]);
}
else
{
string.Format("Unable to press key {0}' on {1}", keyCode, vm["ElementName"]);
}
inParams.Dispose();
outParams.Dispose();
keyboard.Dispose();
vm.Dispose();
}
static void Main(string[] args)
{
if (args != null && args.Length != 2)
{
Console.WriteLine("Usage: PressKey vmName keyCode");
return;
}
string vmName = args[0];
int keyCode = int.Parse(args[1]);
PressKey(args[0], keyCode);
}
}
}
Im folgenden Visual Basic Scripting Edition (VBScript)-Beispiel wird ein Tastendruck simuliert.
option explicit
dim objWMIService
dim fileSystem
const wmiSuccessful = 0
Main()
'-----------------------------------------------------------------
' Main routine
'-----------------------------------------------------------------
Sub Main()
dim computer, objArgs, vmName, computerSystem, keycode, keyboard
set fileSystem = Wscript.CreateObject("Scripting.FileSystemObject")
computer = "."
set objWMIService = GetObject("winmgmts:\\" & computer & "\root\virtualization\v2")
set objArgs = WScript.Arguments
if WScript.Arguments.Count = 2 then
vmName= objArgs.Unnamed.Item(0)
keycode = objArgs.Unnamed.Item(1)
else
WScript.Echo "usage: cscript PressKey.vbs vmName keycode"
WScript.Quit
end if
set computerSystem = GetComputerSystem(vmName)
set keyboard = GetComputerKeyboard(computerSystem)
if PressKey(keyboard, keycode) then
WriteLog "Done"
WScript.Quit(0)
else
WriteLog "PressKey failed"
WScript.Quit(1)
end if
End Sub
'-----------------------------------------------------------------
' Retrieve Msvm_VirtualComputerSystem from base on its ElementName
'
'-----------------------------------------------------------------
Function GetComputerSystem(vmElementName)
dim query
On Error Resume Next
query = Format1("select * from Msvm_ComputerSystem where ElementName = '{0}'", vmElementName)
set GetComputerSystem = objWMIService.ExecQuery(query).ItemIndex(0)
if (Err.Number <> 0) then
WriteLog Format1("Err.Number: {0}", Err.Number)
WriteLog Format1("Err.Description:{0}",Err.Description)
WScript.Quit(1)
end if
End Function
'-----------------------------------------------------------------
' Retrieve Msvm_Keyboard from given computer system
'
'-----------------------------------------------------------------
Function GetComputerKeyboard(computerSystem)
dim query
On Error Resume Next
query = Format1("ASSOCIATORS OF {{0}} WHERE resultClass = Msvm_Keyboard", computerSystem.Path_.Path)
set GetComputerKeyboard = objWMIService.ExecQuery(query).ItemIndex(0)
if (Err.Number <> 0) then
WriteLog Format1("Err.Number: {0}", Err.Number)
WriteLog Format1("Err.Description:{0}",Err.Description)
WScript.Quit(1)
end if
End Function
'-----------------------------------------------------------------
' Press the key with the given key code on the given keyboard
'-----------------------------------------------------------------
Function PressKey(keyboard, keyCode)
WriteLog Format2("PressKey({0}, {1})", keyboard.ElementName, keyCode)
dim objInParam, objOutParams
PressKey = false
set objInParam = keyboard.Methods_("PressKey").InParameters.SpawnInstance_()
objInParam.keyCode = keyCode
set objOutParams = keyboard.ExecMethod_("PressKey", objInParam)
if objOutParams.ReturnValue = wmiSuccessful then
WriteLog Format2("The key with code '{0}' is typed on {1}.", keyCode, keyboard.ElementName)
PressKey = true
end if
End Function
'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
dim fileStream
set fileStream = fileSystem.OpenTextFile(".\PressKey.log", 8, true)
WScript.Echo line
fileStream.WriteLine line
fileStream.Close
End Sub
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format2(myString, arg0, arg1)
Format2 = Format1(myString, arg0)
Format2 = Replace(Format2, "{1}", arg1)
End Function
'------------------------------------------------------------------------------
' The string formatting functions to avoid string concatenation.
'------------------------------------------------------------------------------
Function Format1(myString, arg0)
Format1 = Replace(myString, "{0}", arg0)
End Function
Anforderungen
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows 8 [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows Server 2012 [nur Desktop-Apps] |
| Namespace |
Root\Virtualization\V2 |
| MOF |
|
| DLL |
|