Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2010
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
Capturar las teclas Alt+TAb

Estoy intentando crear una especie de 'Tasklist' con los formularios que el usuario tiene abiertos de la aplicación. La idea es 'capturar' el Alt+Tab de Windows para mostrar los formularios minimizados por el usuario (si los hay) y permitirle al usuario cambiar rapidamente de formulario.
El control de los formularios ya me funciona bien, solo me falta el que la aplicación procese el Alt+Tab,, me salta siempre el de windows,, si lo pongo una tecla rápida como por ejemplo Ctrl+J, me funciona perfectamente,, este es el código, agradeceria me indicasen que estoy haciendo mal.

Código:
 procedure TfrmPrincipal.AppMessage(var Msg: tagMSG; var Handled: Boolean);
begin
   if (Msg.message = WM_SYSCOMMAND) then
  begin
      if (LOWORD(Msg.lParam) = MOD_ALT)
      and (HIWORD(Msg.lParam) = VK_TAB ) then
        ShowMessage('Pulsaste las teclas "ALT + TAB"');
  end;
end;
  initialization
   RegisterHotKey(Application.Handle, GlobalAddAtom('MiHotKey'), MOD_ALT, VK_TAB);

finalization
  UnregisterHotKey(Application.Handle, GlobalAddAtom('MiHotKey'));
Gracias....
Responder Con Cita
  #2  
Antiguo 21-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Posiblemente se pueda, pero si Windows estuviera bien diseñado no debería ser posible (al menos en mi opinión).

Por otro lado no es necesario que lo hagas, ya que puedes usar la combinación [Ctrl]+[Tab], la cual va cambiando entre lengüetas o ventanas de una única aplicación. Al menos así es en algunas aplicaciones que he visto y es lo que yo haría.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 21-10-2010
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
Capturar Alt+Tab

Cita:
Empezado por Ñuño Martínez Ver Mensaje
Posiblemente se pueda, pero si Windows estuviera bien diseñado no debería ser posible (al menos en mi opinión).

Por otro lado no es necesario que lo hagas, ya que puedes usar la combinación [Ctrl]+[Tab], la cual va cambiando entre lengüetas o ventanas de una única aplicación. Al menos así es en algunas aplicaciones que he visto y es lo que yo haría.
Gracias por la respuesta, por desgracia, esta aplicación no está diseñada con menus y forms situados en pestañas, son ventanas individuales, y con ventanas individuales no funciona, supongo que podria utilizar por ejemplo Ctrl+T y que el usuario intente cambiar su hábito de utilizar Alt+Tab....
Responder Con Cita
  #4  
Antiguo 21-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Galahad Ver Mensaje
Gracias por la respuesta, por desgracia, esta aplicación no está diseñada con menus y forms situados en pestañas, son ventanas individuales, y con ventanas individuales no funciona, supongo que podria utilizar por ejemplo Ctrl+T y que el usuario intente cambiar su hábito de utilizar Alt+Tab....
¿Que no funciona con [Ctrl]+[Tab]? Eso sí que es raro.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 21-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Código Delphi [-]
unit Unit1;

interface

uses Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
  procedure HotKey(var Message: TMessage); message WM_HOTKEY;

    procedure FormClose(Sender: TObject; var Action: TCloseAction); end;

var Form1: TForm1;

implementation

{$r *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle, 111, MOD_ALT, VK_TAB);
end;

procedure TForm1.HotKey(var Message: TMessage);
begin
 if Message.WParam = 111 then
  begin
   MessageBox(0, 'Hola', 'jeje', 0);
  end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnRegisterHotKey(Handle, 111);
end;

end.


Saludos.
Responder Con Cita
  #6  
Antiguo 21-10-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Escafandra, ¿esto funciona? Lo he probado en Windows Vista y no pasa nada.

// Saludos
Responder Con Cita
  #7  
Antiguo 21-10-2010
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 18
Galahad Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Escafandra, ¿esto funciona? Lo he probado en Windows Vista y no pasa nada.

// Saludos
Je,je,,, yo también lo he probado,, y efectivamente no funciona,, pero si
cambiamos MOD_ALT, por MOD_CONTROL,, funciona !!!,, osea

Código:
RegisterHotKey(Handle, 111, MOD_CONTROL, VK_TAB);
esto consigue el resultado correcto, llego a la conclusión de que Windows "procesa" su propio control antes del de nuestro programa.

Saludos...
Responder Con Cita
  #8  
Antiguo 21-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Escafandra, ¿esto funciona? Lo he probado en Windows Vista y no pasa nada.

// Saludos

Bueno, lo he probado en un XP profesional y otro Home y si me funciona.
No he tenido oportunidad de probar en Vista ni W7.

Saludos.
Responder Con Cita
  #9  
Antiguo 21-10-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Efectivamente, el sistema de capturar HotsKeys en Win 7 no funciona con ALT+TAB. Pero si funciona un Hook al teclado como el de este ejemplo que he preparado:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  WHookKeyboard: cardinal;

implementation

{$R *.dfm}
function KeyboardHook(Code, wParam, lParam: Integer): Integer; stdcall;
begin
  if (Code = HC_ACTION) and LongBool(PDWORD(lParam + 8)^ and $20{LLKHF_ALTDOWN}) and (PDWORD(lParam)^ = VK_TAB) then
  begin
      Beep();
  end;
  Result:= CallNextHookEx(WHookKeyboard, Code, wParam, lParam);
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
 WHookKeyboard:= SetWindowsHookEx(13{WH_KEYBOARD_LL}, @KeyboardHook, HInstance, 0);

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnhookWindowsHookEx(WHookKeyboard);
end;

end.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Capturar las teclas presionadas lfb C++ Builder 6 27-09-2010 08:40:57
Capturar todas las teclas. rauros API de Windows 4 17-09-2008 09:43:07
Capturar teclas en form ivanloco Varios 3 21-07-2008 12:10:25
Problemas al capturar teclas Dexter182 Varios 2 09-10-2005 22:36:12
Capturar teclas en edit sur-se OOP 10 16-07-2004 13:25:17


La franja horaria es GMT +2. Ahora son las 18:16:27.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi