Я готовлю модуль Delphi, который устанавливает ловушку в потоке для записи макроса:
FHandleRec := SetWindowsHookEx(WH_JOURNALRECORD, FRecordProc, HInstance, 0);
FHandlePlay := SetWindowsHookEx(WH_JOURNALPLAYBACK, FPlayProc, HInstance, 0);
Это отлично работает в WinXP, но в Vista / Windows 7 не работает с ERROR_ACCESS_DENIED
.
Я нашел в Google ( this ) со ссылкой ( that ). Цитата:
Процесс с более низкими привилегиями не может:… использовать ловушки журнала для отслеживания процесс с более высокими привилегиями.
Безуспешная попытка:
Пример кода:
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
и ImpersonateLoggedOnUser
выполняются без ошибок.
Другие возможности попробовать:
Не могли бы вы показать код, который устанавливает перехватчик в Visa / Windows 7, или предложить рабочее решение?