none
Modificar wrapper de la API WIN32 para simular entradas de teclado y raton que funcione en SilverLight RRS feed

  • Pregunta

  • ¡Buenos días!

    Hace unos días un usuario preguntaba cómo emular la presion de una tecla en: http://social.msdn.microsoft.com/Forums/es-ES/wpfes/thread/5258f6bd-8ea5-4615-b12e-f3252b43aad4 y David apuntaba que la mejor opción era a través del wrapper: http://inputsimulator.codeplex.com/ Ese día aprendimos muchas cosas, al menos yo ;-)

    Salseando me percaté que el wrapper sólo es para wpf asi que me bajé el código fuente (en principio no es tan extenso como creía) y lo he compilado para silverlight. Ningún problema en cuanto a compatibilidades de espacios de nombre, clases,...etc. Pero al compilarlo me casca en las líneas:

    var numberOfSuccessfulSimulatedInputs = SendInput(1, inputList, Marshal.SizeOf(typeof(INPUT)));
    if (numberOfSuccessfulSimulatedInputs == 0) throw new Exception(string.Format("The key down simulation for {0} was not successful.", keyCode));
    

    El error que da es un acceso restringido al Marshal.SizeOf. ¿Alguién sabe para que se utiliza? (Mis dificultades con C#? ;-)). Tiene que ver con la memoría, pero se me escapa. Una vez conocido esto quedaría saber cómo se solventa en Silverlight, y probar que funciona. Tal vez no se pueda emplear en Silverlight por sus accesos restringidos....

    Buen fin de semana.

    viernes, 16 de julio de 2010 8:51

Todas las respuestas

  • Hola CorsarioVasco

    Ayer navegando por internet me tope con este ejemplo de como crear un teclado en silverlight con todo el codigo fuente y sin usar el api win32:

    http://www.cespage.com/silverlight/sl4tut21.html

    quizas te sirva, ademas el código está en visual basic.net

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    viernes, 16 de julio de 2010 9:38
    Moderador
  • ¡Buenos días Josue!

    Gracias por tu aportación ;-). A ver si sacas un ratillo y leemos algo nuevo en el blog ;-)

    En su día ya lo ví, y he estado haciendo cosillas sobre él. Funciona muy bien y esta muy trabajado. La pega es que no funciona con teclas como el control o el shift. Para el shift lo que hace es a través de código poner todas las letras en mayúsculas. Debido a su limitación se me ocurrió intentar modificar el wrapper. Si consigo avanzar en esta línea postearé el código para que lo tengamos todos. Seguro que a más de uno le servirá.

     

    Un abrazo,

     

     

    viernes, 16 de julio de 2010 9:52
  • Hola Corsario!

    Si encuentro alguna otra cosa te la paso.

    En cuanto a lo del blog, ayer publique una actualización del articulo de silverlight en windows phone 7 CTP con el paso a la nueva versión Beta, todos los cambios que hay que hacer y usando los input panels en los textbox.

    La verdad es que llevo unas semanitas que no paro de trabajar (entrego un proyecto en 15 días, y estamos a tope todos en mi departamento trabajando de sol a sol) de todas formas, se admiten sugerencias sobre que temas interesan más!!!

    Un gran saludo y gracias por leerme!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    viernes, 16 de julio de 2010 10:01
    Moderador
  • Hola Corsario.

    En un principio, no estoy muy seguro de que puedas acceder a la API Win32 desde silverlight, yo lo intente con la version 3 y no tuve exito, es posible que con la 4 se pueda realizar.

    No te deja por tema de permisos, si pudieses acceder a la API tendrias todo el sistema en tus manos (imaginate...).

    No obstante hare algunas pruebas cuando pueda, a ver si con un sistema completo de privilegios es posible.

    Por cierto, Marshall.SizeOf() es lo que viene a ser en c++ de toda la vida el sizeof(), el problema es que difiere de c# en que en c++ se puede obtener el tamaño real de bytes de un objeto, mientras que en c# al ser codigo manejado esto no es posible (mediante este metodo) y siempre va a devolver el tamaño de su referencia (o sea, 4bytes). De modo que esa funcion retorna el tamaño de la clase INPUT.


    Saludos
    David González
    MCP.
    Visita mi Blog en: http://www.dgzornoza.com/
    viernes, 16 de julio de 2010 12:40