Hola.
El código que has citado no sirve para sintetizar pulsaciones de teclado, sino para enviar caracteres, por ende, no es posible utilizar las teclas especiales
Fn. Aparte de eso, no está demasiado bien enfocada la implementación de los métodos, me refiero, la función que escribí se debería haber llamado
SendChar en lugar de
SendKey para evitar este tipo de confusión.
Para enviar pulsaciones del teclado la metodología es practicamente idéntica, solo que obviamente no hay que realizar ninguna conversión a caracter. Puedes tratar de modificar el código que publiqué para ignorar la conversión a caracter a ver si así funciona como esperas.
Te mostraría un ejemplo actualizado y completo pero son bastantes definiciones las que hay que usar y agrandaría demasiado (todavía más) esta respuesta, sin embargo, todo lo que necesitas lo puedes encontrar en la implementación que hice de
RAW_INPUT en mi API
ElektroKit, solo tienes que copiar y pegar los miembros relacionados entre sí:
<SuppressUnmanagedCodeSecurity>
<DllImport("user32.dll", SetLastError:=True)>
Public Shared Function SendInput(ByVal nInputs As Integer,
<MarshalAs(UnmanagedType.LPArray), [In]> ByVal pInputs As Input32(),
ByVal cbSize As Integer
) As Integer
End Function
<SuppressUnmanagedCodeSecurity>
<DllImport("user32.dll", SetLastError:=True)>
Public Shared Function SendInput(ByVal nInputs As Integer,
<MarshalAs(UnmanagedType.LPArray), [In]> ByVal pInputs As Input64(),
ByVal cbSize As Integer
) As Integer
End Function
+
( click en las imágenes para ir al código fuente )
( Además de las estructuras mencionadas, también necesitarás:
Win32.Types.InputType,
Win32.Types.MouseInput,
Win32.Types.KeyboardInput y
Win32.Types.HardwareInput )
+
(Función:
Keyboard.SendKey())
Nota:
La estructura
Input está dividida en dos, una para ser utilizada bajo Windows x86, y la otra para Windows x64. Y a raíz de lo mencionado hay una condicional para utilizar una estructura o la otra en el bloque del método
SendKey (entre otros). El motivo de todo esto es que en un principio se me dificultó la tarea de portabilizar la estructura, sin embargo, todo eso ya lo refactoricé y lo simplifiqué, pero el código que hay publicado en GitHub está desactualizado (de todas formas te funcionará correctamente. simplemente es un código feo o guarro por así decirlo).
Si te parece mucho lio todo lo de arriba, la alternativa sería compilar la librería y/o descargar la última release ya compilada desde GitHub, y entonces simplemente tienes que llamar a la función
Elektro.Core.IO.Tools.Keyboard.SendKey().
Ejemplo de uso:
Imports Elektro.Core.IO.Enums
Imports Elektro.Core.IO.Tools
Public NotInheritable Class Form1
Private Sub Button1_Click() Handles Button1.Click
Process.Start("proceso.exe")
Thread.Sleep(TimeSpan.FromSeconds(5))
Keyboard.SendKey(Keys.F10, KeyBehavior.Press)
End Sub
End Class
Saludos