El pression key no me funciona ya C#

Iniciado por SrTrp, 26 Abril 2020, 06:23 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno hace tiempo tenia sin programar en C# pero usaba mucho la funciones de GetAsyncKeyState pero ahora que estoy de vuelta pruebo mis proyectos pasados y nuevos que creo y no le sirven y en vb.net si me van bien el getAsynKeyState, lo uso así:
Código (csharp) [Seleccionar]

//declaracion
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern void mouse_event(int dwflags, int dx, int dy, int cbuttons, int dwExtraInfo);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern bool GetCursorPos(out Point lpPoint);
        [DllImport("user32.dll")]
        public static extern int GetAsyncKeyState(Keys vkeys);


//metodo

if (GetAsyncKeyState(Keys.F10) == -32767)
           {
///funcion
           }
           if (GetAsyncKeyState(Keys.F11) == -32767)
           {
              //funcion
           }

@XSStringManolo

El número que usas -32767 es como la versión int del binario hardcodeada. Si se cambia el tipo de encoding de bits de la arquitectura creo que tu código deja de funcionar. Véase a referencia LSB y MSB.

Por otro lado se hace un mal uso del retorno de la llamada ya que retorna bytes no un int.

if (GetAsyncKeyState(VK_F10) & 0x8000) {
//funcion
}

Aquí la docu: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getasynckeystate
Te vienen teclas también.

En C# tienes también getkeystates
https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.keyboard.getkeystates?redirectedfrom=MSDN&view=netcore-3.1#System_Windows_Input_Keyboard_GetKeyStates_System_Windows_Input_Key_

SrTrp

Cita de: @XSStringManolo en 26 Abril 2020, 14:15 PM
El número que usas -32767 es como la versión int del binario hardcodeada. Si se cambia el tipo de encoding de bits de la arquitectura creo que tu código deja de funcionar. Véase a referencia LSB y MSB.

Por otro lado se hace un mal uso del retorno de la llamada ya que retorna bytes no un int.

if (GetAsyncKeyState(VK_F10) & 0x8000) {
//funcion
}

Aquí la docu: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getasynckeystate
Te vienen teclas también.

En C# tienes también getkeystates
https://docs.microsoft.com/en-us/dotnet/api/system.windows.input.keyboard.getkeystates?redirectedfrom=MSDN&view=netcore-3.1#System_Windows_Input_Keyboard_GetKeyStates_System_Windows_Input_Key_
Muchisimas gracias! me sirvio