Autor
|
Tema: Combinación de teclas en keybd_event (Leído 9,554 veces)
|
gulabyte
Desconectado
Mensajes: 97
|
kepatxa!! Resulta que buscando y buscando sobre cómo girar la pantalla con vb he dado con la función keybd_event y he querido aportar lo que he aprendido de él... La cuestión es que se puede qirar la pantalla usando la combinación de teclas Ctrl+Alt+Flechitas en WinXP y es por eso que necesitaba de keybd_event... pero aparte de brindarte todas las funciones que Windows implementa mediante las combinaciones de teclas (administrador de tareas, dialogo buscar, un gran etc...) la función keybd_event te permite por ejemplo mantener alguna tecla permanentemente... Yo dejo el código para que se dé rienda suelta al tema... La gran función keybd_event: Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Algunas constantes.. Const KEYEVENTF_KEYUP = &H2 'Para despulsar o soltar la tecla Const KEYEVENTF_EXTENDEDKEY = &H1 'No sé lo que es Const VK_DELETE = &H2E 'Del Const VK_MENU = &H12 'Alt Const VK_CONTROL = &H11 Const VK_DOWN = &H28 Const VK_RIGHT = &H27 Const VK_LEFT = &H25 Const VK_UP = &H26 Hay toda una lista de constantes de teclas algún foro chino...bueno por si no sabéis chino...os ayudo http://blog.csdn.net/caridle/archive/2007/06/26/1667741.aspx un ejemplo: poner pantalla de lado [lo de arriba a la izquierda] Call keybd_event(VK_CONTROL, 0, 0, 0) 'Pulsar Call keybd_event(VK_MENU, 0, 0, 0) 'Pulsar Call keybd_event(VK_LEFT, 0, 0, 0) 'Pulsar Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) 'Soltar Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0) 'Soltar Call keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0) 'Soltar
Acordaros de "soltar" la tecla porque sino se puede quedar alguna tecla pulsada y se lía gorda porque las demás teclas pueden funcionar como combinación... a mi me ha pasao que he puesto VKK_CONTROL (sin Option Explicit) y se me ha quedao la pantalla palla y las teclas paca... estrujando el cerebro para mover bien el ratón y hacer copy&past de VK-UP y ejecutar que lo disfruten !! salu10!!
|
|
|
En línea
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
jej.. holas
Parece muy bueno. Probé asíéndolo desde el teclado en mi WinXP SP3 y nada. ya te digo si me funciona el code...
<-----------------------> nada...
|
|
« Última modificación: 3 Febrero 2009, 05:23 am por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
kepatxa!! Resulta que buscando y buscando sobre cómo girar la pantalla con vb he dado con la función keybd_event y he querido aportar lo que he aprendido de él... La cuestión es que se puede qirar la pantalla usando la combinación de teclas Ctrl+Alt+Flechitas en WinXP y es por eso que necesitaba de keybd_event... pero aparte de brindarte todas las funciones que Windows implementa mediante las combinaciones de teclas (administrador de tareas, dialogo buscar, un gran etc...) la función keybd_event te permite por ejemplo mantener alguna tecla permanentemente... Yo dejo el código para que se dé rienda suelta al tema... La gran función keybd_event: Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) Algunas constantes.. Const KEYEVENTF_KEYUP = &H2 'Para despulsar o soltar la tecla Const KEYEVENTF_EXTENDEDKEY = &H1 'No sé lo que es Const VK_DELETE = &H2E 'Del Const VK_MENU = &H12 'Alt Const VK_CONTROL = &H11 Const VK_DOWN = &H28 Const VK_RIGHT = &H27 Const VK_LEFT = &H25 Const VK_UP = &H26 Hay toda una lista de constantes de teclas algún foro chino...bueno por si no sabéis chino...os ayudo http://blog.csdn.net/caridle/archive/2007/06/26/1667741.aspx un ejemplo: poner pantalla de lado [lo de arriba a la izquierda] Call keybd_event(VK_CONTROL, 0, 0, 0) 'Pulsar Call keybd_event(VK_MENU, 0, 0, 0) 'Pulsar Call keybd_event(VK_LEFT, 0, 0, 0) 'Pulsar Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) 'Soltar Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0) 'Soltar Call keybd_event(VK_LEFT, 0, KEYEVENTF_KEYUP, 0) 'Soltar
Acordaros de "soltar" la tecla porque sino se puede quedar alguna tecla pulsada y se lía gorda porque las demás teclas pueden funcionar como combinación... a mi me ha pasao que he puesto VKK_CONTROL (sin Option Explicit) y se me ha quedao la pantalla palla y las teclas paca... estrujando el cerebro para mover bien el ratón y hacer copy&past de VK-UP y ejecutar que lo disfruten !! salu10!! a mi me adelanta (flecha derecha), o rebobina (flecha izquierda) la cancion del winamp con eso. seguro que eso funciona asi nomas?, no sera q habilitaste alguna cosa del nVidia control panel? saludos
|
|
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Hola, es bueno que hayas aprendido a manejar keybd_event, pero creo no es Windows el que gira la pantalla, sino el sofware asociado a los drivers del video, N-videa, ATI, o las On-board de Intel traen esas funciones (que se pueden Habilitar o deshabilitar desde sus propiedades), pero no todos los drivers de videos traen esa funcion y mucho menos los genéricos de windows (como trata de explicarte el_c0c0)
Saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
gulabyte
Desconectado
Mensajes: 97
|
a mi me adelanta (flecha derecha), o rebobina (flecha izquierda) la cancion del winamp con eso.
seguro que eso funciona asi nomas?, no sera q habilitaste alguna cosa del nVidia control panel?
saludos Tengo puesto activar rotación en Intel(R) GMA Driver en el Panel de Control y es eso lo que habilita la combinación de teclas... sino tienes activada la opción deja de funcionar la combinación. Conclusión: si no tiene el software asociado al driver la opción de girar la pantalla no hay manera de hacerlo... povaya
|
|
|
En línea
|
|
|
|
el_c0c0
Desconectado
Mensajes: 307
|
a mi me adelanta (flecha derecha), o rebobina (flecha izquierda) la cancion del winamp con eso.
seguro que eso funciona asi nomas?, no sera q habilitaste alguna cosa del nVidia control panel?
saludos Tengo puesto activar rotación en Intel(R) GMA Driver en el Panel de Control y es eso lo que habilita la combinación de teclas... sino tienes activada la opción deja de funcionar la combinación. Conclusión: si no tiene el software asociado al driver la opción de girar la pantalla no hay manera de hacerlo... povaya claa, desde el nvidia control panel se puede rotar, pero no me fije si se puede con una convinacion de teclas.. saludos
|
|
« Última modificación: 3 Febrero 2009, 19:11 pm por el_c0c0 »
|
En línea
|
'- coco "Te voy a romper el orto"- Las hemorroides
|
|
|
gulabyte
Desconectado
Mensajes: 97
|
Me pregunto si no hay alguna API que valga como estándar para comunicarse con los drivers de pantalla, sea ATI, nVidia, Intel o cualquiera... supongo que se enviaran datos medianamente parecidos sea un driver u otro no?? no sé... En algún lado leí que unos programadores tenían el mismo problema y creo que "depuraban" el panel nVidia añadiendo un breakpoint en la función ChangeDisplaySettingsExW (debe de haber más de uno según termina en A, W...) haber si saltaba. Y decían que saltaba, es decir, que sí que se usaba esa función para girar la pantallla... Intentaré buscar donde vi eso... haber si se puede ver que función usa mi driver... Todo esto parece muy complejo... no se por qué me da que habrá que saber algo más que VB para profundizar en esto.... PD: Supongo que se podría analizar que función se llama una vez pulsas ctrl-alt-flecha... salu10!!
|
|
|
En línea
|
|
|
|
gulabyte
Desconectado
Mensajes: 97
|
He encontrado el foro donde vi eso de debugear el panel de control... el post dice lo siguiente: Hi Mikael, Thanks for your feedback. The output means that the first two graphic device/driver does not support rotation operation from Windows. I suspect the manufacturer's control panel application uses undocumented interface to talk to their drivers to get it done without using standard ChangeDisplaySettingsEx. To verify this, you may use windbg to attach your manufacturer's control panel application process, and set a breakpoint to ChangeDisplaySettingsEx, like this: 0:000> bp USER32!ChangeDisplaySettingsW 0:000> bp USER32!ChangeDisplaySettingsA 0:000> bp USER32!ChangeDisplaySettingsExW 0:000> bp USER32!ChangeDisplaySettingsExA We set the breakpoints for all entrypoints for ChangeDisplaySettings* APIs. Then, you may try to rotate the screen with the control panel application. If the debugger does not break, it means your application does not use ChangeDisplaySettings* APIs. Note: some manufacturer's control panel applications may IPC to another worker process to call ChangeDisplaySettings*, so you may try this for all the possible processes used by control panel application. Thanks. Best regards, Jeffrey Tan Microsoft Online Community Support ========================================= Delighting our customers is our #1 priority. We welcome your comments and suggestions about how we can improve the support we provide to you. Please feel free to let my manager know what you think of the level of service provided. You can send feedback directly to my manager at: msdnmg@microsoft.com. This posting is provided "AS IS" with no warranties, and confers no rights. undocumented interface to talk to their drivers.... que rollo tienen los manufacturers esos no¿¿ Pero luego dice que le salta el ChangeDispllaySettingsEx... Ahí mencionan el "windbg", sabe álguien cómo usarlo?? salu10!! PC (Por Cierto): El foro de donde saque el post es éste http://www.relatedterms.com/ViewThread.aspx?t=799094 y profundizan bastante en el tema pero está en english...
|
|
|
En línea
|
|
|
|
gulabyte
Desconectado
Mensajes: 97
|
Nada al final parece que aunque se usa la función ChangeDisplaySettingsExW no es esta la función que realiza la rotación sino otra que es especifica del driver.... en este caso una API de Intel.... Según dicen se puede girar la pantalla con ChangeDisplaySettings siempre que EnumDisplaySettingsEx diga que es compatible... salu10!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Combinación de teclas se cambia sin darme cuenta de como
Windows
|
motocros_elche
|
3
|
2,926
|
19 Enero 2013, 17:53 pm
por Stakewinner00
|
|
|
keybd_event
Programación C/C++
|
MessageBoxA
|
0
|
1,651
|
19 Marzo 2013, 06:36 am
por MessageBoxA
|
|
|
Alternar entre dos monitores con una combinación de teclas
Windows
|
Kurolox
|
3
|
3,405
|
4 Mayo 2014, 19:19 pm
por RubenLL
|
|
|
Cambiar combinación de teclas para mostrar y esconder keylogger
Hacking
|
joe.sistemas
|
2
|
3,535
|
19 Julio 2015, 01:59 am
por beholdthe
|
|
|
Problema al enviar combinación de teclas con PostMessage
Programación C/C++
|
ramiro069
|
0
|
1,893
|
12 Octubre 2016, 16:19 pm
por ramiro069
|
|