Disculpas a los afectados por mi comentario del blog
. El código del hook que está en tu página esta excelente roman, solo hace falta levantar el Hook al inicio de la aplicación y quitarlo al cerrar. Lo use combinado con el método de jmariano para desactivar el botón y ya puedo mostrar mi menú personalizado. Solo una cosa más, puse una linea para mandar a mostrar mi menú al comprobar que la tecla presionada era la tecla de Windows y que desaparezca el menú si la presiono de nuevo,
pero cuando dejo presionada la tecla el menu parpadea apareciendo y desapareciendo. Me puse a buscar código por internet y encontre que dentro de la estructura
TKbdHookInfo hay una variable "
Flags" la cual retorna valores adicionales sobre el evento en cuestión, asi que declare algunas banderas adicionales que vi por ahi:
Código Delphi
[-] LLKHF_EXTENDED = $1; LLKHF_UP = $80;
Asi que el código para que salga el menú solo cuando liberas la tecla de Windows dentro del hook lo deje asi:
Código Delphi
[-]
var
VkCode: DWORD;
Flags: DWORD;
...
begin
VkCode := PKbdHookInfo(LParam).VkCode;
Flags:= PKbdHookInfo(LParam).Flags;
...
if ((VkCode = VK_LWIN) or (VkCode = VK_RWIN)) and (lkWin in Keys) then
begin
Result := 1;
if Flags = LLKHF_UP + LLKHF_EXTENDED then
OnWindowsKey(); exit;
end;
...
end;
Para el caso de la combinación Ctrl+Esc creo que esta un poco más dificil ese detalle, pero bueno, si la gente de Microsoft no le preocupo hacer esa validación, pues yo menos (el que quiera saber a que me refiero que mantenga presionada la combinación Ctrl+Esc un momento)
. Muchas gracias chicos por la ayuda que me han dado, un saludo desde Venezuela.