bem bacana pra quem quer colocar uma especie de atalho dentro do sistema e que funciona com o mesmo minimizado/correndo em segundo plano.{O funcionamento eh o seguinte:# Criamos uma DLL com duas funcoes que exportaremos, uma para instalar o hook e outra para desinstala-lo.# Ha uma terceira funcao que eh a que executara o hook uma vez instalado (CallBack). Nela, o que faremos eh enviar os dados da mensagem capturado a nossa aplicacao.A DLL deve saber em todo momento o handle da aplicacao receptora, de modo que faremos que o leia de um arquivo mapeado na memoria que criaremos desde a propria aplicacao.Eis um exemplo de uso de arquivos mapeados na memoria:- Compartilhar dados entre dois aplicativos DelphiEnviaremos os dados desde a DLL para a aplicacao atraves de uma mensagem do usuario. Tambem se usa esta tecnica da seguinte maneira:- Prevenir duas execucoes simultaneas da sua aplicacaoBem, vamos ao exemplo:****** A DLL QUE INSTALA O HOOK: ******1. Crie o esqueleto de uma DLL (File / New / DLL);2. Troque o codigo do projeto por este outro abaixo:}////// AQUI COMECA O CODIGO DA DLL//////library HookTeclado;{Demonstracao de Hook de teclado a nivel de sistema, Radikal.Como o que queremos e capturar as teclas pressionadas em qualquer partedo Windows, precisamos instalar a funcao CallBack que chamarao Hook em uma DLL, que e esta mesma.}uses Windows, Messages;const CM_MANDA_TECLA = WM_USER + $1000;var HookDeTeclado : HHook; ArquivoM : THandle; PReceptor : ^Integer;function CallBackDelHook( Code : Integer; wParam : WPARAM; lParam : LPARAM ) : LRESULT; stdcall;{Esta e a funcao CallBack que chamara o hook.}begin {Se uma tecla foi pressionada ou liberada} if code=HC_ACTION then begin {Observamos se o arquivo existe} ArquivoM:=OpenFileMapping(FILE_MAP_WRITE,False,'OReceptor'); {Se nao existe, nao enviamos nada para a aplicacao receptora} if ArquivoM<>0 then begin PReceptor:=MapViewOfFile(ArquivoM,FILE_MAP_WRITE,0,0,0); PostMessage(PReceptor^,CM_MANDA_TECLA,wParam,lParam); UnmapViewOfFile(PReceptor); CloseHandle(ArquivoM); end; end; {Chamamos ao seguinte hook de teclado da cadeia} Result := CallNextHookEx(HookDeTeclado, Code, wParam, lParam)end;procedure HookOn; stdcall;{Procedure que instala o hook}begin HookDeTeclado:=SetWindowsHookEx(WH_KEYBOARD, @CallBackDelHook, HInstance , 0);end;procedure HookOff; stdcall;begin {procedure para desinstalar o hook} UnhookWindowsHookEx(HookDeTeclado);end;exports {Exportamos as procedures...} HookOn, HookOff;beginend.////// AQUI TERMINA O CODIGO DA DLL//////{3. Salve o projeto com o nome 'HookTeclado.dpr' e compile-o, para gerar a DLL.E provavel que o Delphi apresente a mensagem de erro:"Cannot debug project unless a host application is defined. Use the Run|Parameters... dialog box."Caso esta mensagem apareca, abra o menu Run / Parameters, e preencha o campo *Host Application* com o endereco do executavel do programa que utilizarah esta DLL. Caso o programa ainda nao tenha sido criado, apenas salve a DLL.MAS LEMBRE-SE!! Apos criar o programa (que faremos na sequencia), retorne ao projeto da DLL e faca isso, caso contrario, o programa NAO FUNCIONARA!!****** APLICACAO QUE RECEBE DADOS DO HOOK ******1. Crie uma nova aplicacao;2. Inclua um TMemo(Memo1) no Form13. Troque o codigo da Unit do Form por este outro abaixo}////// AQUI COMECA O CODIGO DA APLICACAO //////unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;const NomeDLL = 'HookTeclado.dll'; CM_MANDA_TECLA = WM_USER + $1000;type THookTeclado=procedure; stdcall;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject);private { Private declarations } ArquivoM : THandle; PReceptor : ^Integer; HandleDLL :