abrir ventana al apretar teclas??

Iniciado por isseu, 17 Diciembre 2009, 13:00 PM

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

isseu

Como puedo hacer que al apretar cierto conjunto de teclas, se habra una form??, estoy usando GetAsyncKeyState() del api de windows, pero lo estoy usando de esta forma (en un timer claro):
Código (csharp) [Seleccionar]
                if (GetAsyncKeyState(0x46) == -32767)
                {
                    if (GetAsyncKeyState(0xA2) == -32767 || GetAsyncKeyState(0xA3) == -32767)
                    {
                        this.Visible = true;
                    }
                }

0x46=f
0xA2 y 0xA3 son ambos ctrl
Sucede que para que se habra hay que apretar ambos al mismo tiempo con poca diferencia de tiempo, ¿que otra manera mejor existe?

raul338

No se puede hacer con hot-key??? (ahi no tendrias diferencia de tiempo)

Hazlo con hooks, y cuando se presionen las teclas haz una diferencia del tiempo que paso entre ellas, si es menor a medio segundo, haces lo que tengas que hacer, sino no hagas nada. No lo hagas con el if ya que es como que estan las 2 al mismo tiempo (sino has un sleep entre un if y el otro)


raul338

Cita de: isseu en 17 Diciembre 2009, 13:00 PM
Como puedo hacer que al apretar cierto conjunto de teclas, se habra una form??, estoy usando GetAsyncKeyState() del api de windows, pero lo estoy usando de esta forma (en un timer claro):
Código (csharp) [Seleccionar]
                if (GetAsyncKeyState(0x46) == -32767)
                {
                    if (GetAsyncKeyState(0xA2) == -32767 || GetAsyncKeyState(0xA3) == -32767)
                    {
                        this.Visible = true;
                    }
                }

0x46=f
0xA2 y 0xA3 son ambos ctrl
Sucede que para que se habra hay que apretar ambos al mismo tiempo con poca diferencia de tiempo, ¿que otra manera mejor existe?

Ahora que me fijo bien, (y gracias a la respuesta de meta me fije otra vez), cargas el formulario en memoria antes de verificar las teclas??? Si es asi, al menos deberia funcionar (depende en que evento este el codigo)

Y si no lo cargas, te conviene tener el codigo en el void Main, haces un while(true) y application.doEvents, sino agrega al formulario un IMessageFilter y filtra los mensajes cuando se presionan las teclas ;)

[D4N93R]

Te recomiendo que lo hagas con IMessageFilter, como no tengo tiempo te dejo dos links para que te guíes..

http://www.codeproject.com/KB/cs/imessagefilterarticle.aspx

http://www.codeproject.com/KB/COM/IMessageFilterImpl.aspx

Un saludo!

isseu