Saudações a todos:
O problema: Sob Windows 8, o bloqueio de teclado/mouse não funciona.
Testei, inclusive a função BlockInput em um aplicação simples, sem ACBR e realmente não funciona. O problema está no nível de privilégio requerido para que o Windows processe a função.
Uma forma de fazer com que o aplicativo funcione é mudar o nível de privilégio do arquivo .exe manualmente (marcando a opção Executar este programa como administrador).
O desejável é que o aplicativo não requeira esta mudança.
A solução: Ao pesquisar na NET encontrei este artigo bem explicado.(http://www.cesarromero.com.br/embutindo-o-manifesto-na-aplicao-com-delphi/).
Lá tem uma boa explicação do mecanismo de permissões.
Fiz os simples procedimentos e embuti o RES na minha aplicação.
abaixo um exemplo .dpr simples com a adição do RES
program Project1;
uses
Vcl.Forms,
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
{$R UAC.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Vá em Project/Options/Application e coloque "none" em runtimes themes. Se estiver diferente de None, não funciona.
Após a compilação o bloqueio passou a funcionar normalmente.
Uma dica: o Delphi deve estar rodando com privilégios administrativos, do contrário ele compila e gera o exe mas não o roda, além de exibir uma mensagem informando que necessita de elevação.
O arquivo compilado (.RES) deve estar junto aos principais arquivos do projeto, ou ao compilar, o Delphi informará que o .RES não foi encontrado.
Eu testei o executável na minha maquina de desenvolvimento (W8) e em outras duas, rodando W8 e W8.1. Não testei no W7 com o UAC ativo.
Espero que a dica ajude aos colegas que possam ter a mesma dificuldade.