| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Jue 23 Jun, 2005 10:21 pm Asunto: No se carga Hook de Teclado en Win 98 y Millenuium |
|
|
Tengo el siguiente problema, un programa que hice, hace uso de un Hook de Teclado, este se carga perfectamente en Windows Xp, lo he probado en Windows )8 y Millenium, y me dice que no se pudo cargar el Hook.
Alguna Sugerencia,
Proporciono el enlace del proyecto completo, para descargarlo y por si
alguien lo quiere checar.
http://mx.geocities.com/mverastegui/descarga/lista-kbd5.zip
Gracias de antemano , por sus opiniones.
Miguel Ángel Verástegui Díaz. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 23 Jun, 2005 10:58 pm Asunto: |
|
|
| El tipo de hook que intentas usar (WH_KEYBOARD_LL) solo funciona en Windows NT/2000/XP. El mas parecido en Windows 95/98/ME es "WH_KEYBOARD", pero puede que no permita interceptar alguna de las teclas que necesitas, habría que probarlo. |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Jue 23 Jun, 2005 11:20 pm Asunto: |
|
|
Voy a checar ese Evento, Gracias _LEO, tienes razon
(WH_KEYBOARD_LL) es de ambito global, Win2000/NT/XP pero tambien "WH_KEYBOARD", es de ambito global e inclusive se puede usar en un Hilo Thread. lo voy a probar.
Gracias _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Vie 24 Jun, 2005 9:49 pm Asunto: ¿Alguna forma de leer la pulsacion de CTRl+Alt? |
|
|
ya solucione el problema de la carga del Hook en Win98 y millenium, oero me envia un mensajes de error al pulsar las teclas Ctrl o Alt.
¿de que otra Forma puedo saber la pulsasion de las teclas Ctrl+Alt?
Sin utilizar la estructura KBDLLHOOKSTRUCT de winuser.h para NT/XP
Anexo el codigo que me genera el error
| Código: |
LRESULT CALLBACK KeyHookLL(int nCode, WPARAM wp, LPARAM lp)
{
KBDLLHOOKSTRUCT *pkh = (KBDLLHOOKSTRUCT *) lp;
if (nCode==HC_ACTION) {
int bCtrlKeyDown =// GetKeyState(VK_CONTROL);
GetAsyncKeyState(VK_CONTROL)>>((sizeof(SHORT) * 8) - 1);
// if ((bCtrlKeyDown<0) && (pkh->flags & LLKHF_ALTDOWN) && (pkh->vkCode==char('P'))) /**/
if (((bCtrlKeyDown<0) && (pkh->flags & LLKHF_ALTDOWN) && // en este punto me genera el error
(pkh->vkCode==char('P'))) ||
((pkh->flags & LLKHF_ALTDOWN) && (pkh->vkCode==char('T')))
&& (wp==WM_SYSKEYDOWN||wp==WM_KEYDOWN)) /**/
{
// && (pkh->vkCode==char('Z'))
hwnd = FindWindow(NULL,"Lista exe");
// ShowWindow(hwnd,SW_SHOW);
SetForegroundWindow(hwnd);
PostMessage(hwnd,WMAP_KEYBDHOOKMSG,wp,lp);
MessageBeep(0); // Pitido
//return 1;
}
}
return CallNextHookEx(g_hookHandle, nCode, wp, lp);
} |
Agrego la direccion para descargar el proyecto lista-kbd6
http://mx.geocities.com/mverastegui/descarga/lista-kbd6.zip
incluye imagenes las ventana de error que me aparecen al ejecutarlo en
Win ME
Mi objetivo es obtener la pulsacion de una combinacion de teclas CTRL+ALT+"x" de manera globar ya que quiero que responda mi aplicacion al generarse dicha combinacion.
Alguna sugerencia.
Gracias
Miguel Angel Verastegui Diaz. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 25 Jun, 2005 7:14 am Asunto: |
|
|
He modificado tu rutina del siguiente modo, funciona correctamente desde Windows95 a WindowsXP, siempre y cuando uses un hook de tipo WH_KEYBOARD.
- Al pulsar CTRL+ALT+X envía la pulsación a tu programa:
| Código: | LRESULT CALLBACK KeyHookLL(int nCode, WPARAM wp, LPARAM lp)
{
// Pulsación valida, no se esta soltando la tecla y no es una repetición
if ((nCode == HC_ACTION) && !(HIWORD(lp) & (KF_UP|KF_REPEAT)))
{
// Estado de CTRL y ALT
bool bCtrl = GetAsyncKeyState(VK_CONTROL) & 0x8000;
bool bAlt = GetAsyncKeyState(VK_MENU) & 0x8000;
// Combinación CTRL+ALT+X
if (wp == static_cast<UINT>(VkKeyScan('x')) && bCtrl && bAlt)
{
hwnd = FindWindow(0, "Lista exe");
SetForegroundWindow(hwnd);
PostMessage(hwnd, WMAP_KEYBDHOOKMSG, wp, lp);
MessageBeep(0); // Pitido
return TRUE;
}
}
return CallNextHookEx(g_hookHandle, nCode, wp, lp);
} |
(En este caso no necesitas para nada el WH_KEYBOARD_LL, esto es un hook de más bajo nivel que el WH_KEYBOARD, permite interceptar algunas teclas del sistema antes que este y solo funciona en la familia NT) |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 26 Jun, 2005 1:34 pm Asunto: |
|
|
Por cierto, si solo necesitas que tu programa responda a esa combinación de teclas puedes hacerlo también sin usar hooks, usando la función del API: "RegisterHotKey":
https://cppbuilder.es/viewtopic.php?t=1205
En el ejemplo del enlace si quisieras usar la combinación CTRL+ALT+X usaríamos RegisterHotKey con los siguientes argumentos:
RegisterHotKey(Handle, idHotKey, MOD_CONTROL | MOD_ALT, VkKeyScan('x')) |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
Publicado: Vie 01 Jul, 2005 8:55 pm Asunto: |
|
|
Gracias, _Leo, funciona, muy bien!!!
Lo voy a poner en la Aplicacion que estoy desarrollando!!!
Cualquier resultado te lo haré saber.
Gracias. _________________ Miguel Angel Verastegui Diaz |
|
| Volver arriba |
|
 |
dreamermx Lt JG

Registrado: 14 Oct 2004Mensajes: 57Ubicación: Acapulco Guerrero Mexico
|
|
| Volver arriba |
|
 |
|