@SetWindowsHookEx para WH_JOURNALRECORD falha no Vista / Windows 7

Estou preparando um módulo Delphi, que define um gancho em um thread para gravar uma macro:

FHandleRec  := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);
FHandlePlay := SetWindowsHookEx(WH_JOURNALPLAYBACK, FPlayProc, HInstance, 0);

Isso funciona bem no WinXP, mas no Vista / Windows 7 falha comERROR_ACCESS_DENIED. Eu encontrei no Google est) referindo naquel). A citação

Um processo com privilégios mais baixos não pode:… Use ganchos do Diário para monitorar um processo com privilégios mais alto

Tentei sem sucesso:

xecute o aplicativo como administrador. Provavelmente, o encadeamento é iniciado com privilégios mais baixos que o encadeamento principal (embora eu não tenha 100% de certeza) A representação do encadeamento com o contexto de segurança do administrador também não ajuda.

O exemplo de código:

if LogonUser(PWideChar(sAdminUser), PWideChar(sDomain), PWideChar(sPwd),
             LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, hToken) then 
begin  
  if not ImpersonateLoggedOnUser(hToken) then
    raise Exception.Create('Error impersonating the user');
end;
FHandleRec := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);

LogonUser eImpersonateLoggedOnUser executar sem erros.

Outras possibilidades de experimentar:

Desative o UAC permanentemente. Isso ajuda, mas não posso forçar os usuários do módulo a fazer iss cliente do módulo @A assina um aplicativo e o coloca em um local confiável. Não tentei isso, mas isso complica radicalmente o uso do módulo para os usuário Coloque o módulo em algum aplicativo assinado e distribua o EXE. Isso quebrará algumas funcionalidades principais.

Você pode mostrar o código que está definindo o gancho em Visa / Windows 7 ou sugerir a solução que está funcionand

questionAnswers(2)

yourAnswerToTheQuestion