2013-09-10 2 views
3

Учитывая соответствующий манифест, который устанавливает uiAccess = "true", если программа win32 (которая отлично работает на других системах Windows7) сможет получить верный дескриптор из SetWindowsHookEx при работе на Windows7 (32 бит) на Mac Mini с помощью Parallels?Должен ли SetWindowsHookEx работать в Windows 7 на Mac Mini (parallels)

Это линия Delphi кода xe4, который вызывает API

HookHandle := SetWindowsHookEx(WH_JOURNALPLAYBACK, @Playback, hInstance, 0); 

Я получаю «доступ запрещен», как возвращается ошибка системы в HookHandle.

Я пробовал много вариантов синтаксиса моего манифеста и серьезно задаюсь вопросом, является ли это лишь некоторым ограничением среды Mac Mini/Parallels. Пользователь, вызывающий программу, является администратором. UAC включен. Я попробовал «Запуск от имени администратора»; нет разницы.

Ниже приведен файл манифеста.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity type="win32" name="FFHotKeys" version="1.1.0.0 processorArchitecture="*"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
     <requestedPrivileges> 
     <requestedExecutionLevel level="asInvoker" uiAccess="true"/> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
     <!--The ID below indicates application support for Windows 7 --> 
     <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    </application> 
    </compatibility> 
</assembly> 

Я попытался stting уровень для каждого из этих

level="asInvoker" 
level="requireAdministrator" 
level="highestAvailable" 

и не решить «отказано в доступе» проблему.

Примечание: Я в том числе мой манифест через .rc файл, содержащий

1 24 "FFHotKeys.exe.manifest" 

, а не с помощью функции пользовательского Manifest в рамках проекта> Параметры. У меня есть «Enable Runtime Themes» и пустой пользовательский манифест. Я пробовал это по-другому, но с немного другим.

Примечание: когда я проверяю ресурсы с помощью XN_Resource_Editor, есть ресурс манифеста XP, содержащий точно ожидаемый XML. Также есть 2 ресурса VCLSTYLE. Спасибо.

+2

Windows 7 - это Windows 7, поэтому я не понимаю, почему эмулятор должен быть фактором. –

+0

Вы понимаете, что этот крюк является глобальным крюком? Что с этим связано «uiAccess»? –

+0

@DavidHeffernan: Я получил идею uiAccess из http://stackoverflow.com/questions/9165666/setwindowshookex-for-wh-journalrecord-fails-under-vista-windows-7 и http: //www.autohotkey.com/board/topic/46502-sendplay-and-windows-7-doesnt-work-together/где говорится: «Чтобы установить крючок журнала, приложение должно быть подписано, проявлено для uiAccess и запущено из безопасного места (обычно Program Files). " Я переместил exe в c: \ Program Files \, и я подписал его под кодовым названием. – user424855

ответ

1

Ответ ДА, он должен и должен работать на Parallels.

Проблема была выяснена с помощью XN_Resource_Editor для изучения скомпилированного EXE. Оказывается, только удаление файла .RES до Project> Build привело к перекомпиляции ресурсов, поэтому результаты тестов были запутанными. Что еще более важно, Delphi XE4 использует манифест по умолчанию, когда задействованы темы RunTime. Поэтому решение заключалось в том, чтобы удалить ссылки ресурсов в проекте и вместо этого использовать Project> Options, Application, Runtime Themes, выбрать служебный манифест , а затем Project> Build и code-sign EXE и запустить его из-под c: \ Program файлы \ подкаталог.

processorArchitecture="*" 

был действителен в проявленном

<requestedExecutionLevel level="asInvoker" uiAccess="true"/> 

был действителен в манифесте.

Смежные вопросы