Método TypeText de la clase Msvm_Keyboard
Simula una serie de caracteres con tipo. Esto equivale a llamar a PressKey seguido de ReleaseKey para cada carácter de la cadena.
Sintaxis
uint32 TypeText(
[in] string asciiText
);
Parámetros
-
asciiText [in]
-
Tipo: cadena
Serie de caracteres ASCII o Unicode que se van a escribir. La longitud máxima de esta cadena depende del tipo de caracteres de la cadena.
Tipo de cadena Número máximo de caracteres ASCII 512 Unicode De 256 a 512, dependiendo del número de pares suplentes de la cadena.
Valor devuelto
Tipo: uint32
Un valor devuelto de cero indica que se ha realizado correctamente. Un valor devuelto de uno indica un error causado por caracteres no translatables en la cadena de entrada. Todos los demás valores distintos de cero indican un error al modificar el estado de la clave.
-
Completado sin error (0)
-
Parámetros de método comprobados: trabajo iniciado (4096)
-
Error (32768)
-
Acceso denegado (32769)
-
No compatible (32770)
-
El estado es desconocido (32771)
-
Tiempo de espera (32772)
-
Parámetro no válido (32773)
-
El sistema está en uso (32774)
-
Estado no válido para esta operación (32775)
-
Tipo de datos incorrecto (32776)
-
El sistema no está disponible (32777)
-
Memoria insuficiente (32778)
Comentarios
El filtrado UAC puede restringir el acceso a la clase Msvm_Keyboard . Para obtener más información, consulte Control de cuentas de usuario y WMI.
Ejemplos
En el ejemplo de C# siguiente se simula la escritura de texto. Las utilidades a las que se hace referencia se pueden encontrar en Utilidades comunes para los ejemplos de virtualización (V2).
using System;
using System.Management;
namespace HyperVSamples
{
class TypeTextClass
{
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 TypeText(string vmName, string text)
{
ManagementScope scope = new ManagementScope(@"root\virtualization\v2", null);
ManagementObject vm = Utility.GetTargetComputer(vmName, scope);
ManagementObject keyboard = GetComputerKeyboard(vm);
ManagementBaseObject inParams = keyboard.GetMethodParameters("TypeText");
inParams["asciiText"] = text;
ManagementBaseObject outParams = keyboard.InvokeMethod("TypeText", inParams, null);
if ((UInt16)outParams["ReturnValue"] == ReturnCode.Completed)
{
string.Format("Text {0} was typed on {1}", text, vm["ElementName"]);
}
else
{
string.Format("Unable to type '{0}' on {1}", text, vm["ElementName"]);
}
inParams.Dispose();
outParams.Dispose();
keyboard.Dispose();
vm.Dispose();
}
static void Main(string[] args)
{
if (args != null && args.Length != 2)
{
Console.WriteLine("Usage: TypeText vmName Text");
return;
}
TypeText(args[0], args[1]);
}
}
}
En el ejemplo siguiente de Visual Basic Scripting Edition (VBScript) se simula la escritura de texto.
option explicit
dim objWMIService
dim fileSystem
const wmiSuccessful = 0
Main()
'-----------------------------------------------------------------
' Main routine
'-----------------------------------------------------------------
Sub Main()
dim computer, objArgs, vmName, computerSystem, text, 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)
text = objArgs.Unnamed.Item(1)
else
WScript.Echo "usage: cscript TypeText.vbs vmName text"
WScript.Quit
end if
set computerSystem = GetComputerSystem(vmName)
set keyboard = GetComputerKeyboard(computerSystem)
if TypeText(keyboard, text) then
WriteLog "Done"
WScript.Quit(0)
else
WriteLog "TypeText operation 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
'-----------------------------------------------------------------
' Type the given text to the given keyboard
'-----------------------------------------------------------------
Function TypeText(keyboard, text)
WriteLog Format2("TypeText({0}, {1})", keyboard.ElementName, text)
dim objInParam, objOutParams
TypeText = false
set objInParam = keyboard.Methods_("TypeText").InParameters.SpawnInstance_()
objInParam.asciiText = text
set objOutParams = keyboard.ExecMethod_("TypeText", objInParam)
if objOutParams.ReturnValue = wmiSuccessful then
WriteLog Format2("'{0}' was typed on {1}", text, keyboard.ElementName)
TypeText = true
end if
End Function
'-----------------------------------------------------------------
' Create the console log files.
'-----------------------------------------------------------------
Sub WriteLog(line)
dim fileStream
set fileStream = fileSystem.OpenTextFile(".\Typetext.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
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows 8 [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2012 [solo aplicaciones de escritorio] |
Espacio de nombres |
Root\Virtualization\V2 |
MOF |
|
Archivo DLL |
|