SetWindowsHookEx应该在Mac Mini上的Windows 7上运行(并行)

时间:2013-09-10 08:09:03

标签: delphi winapi manifest parallels

给定一个设置uiAccess =“true”的相应清单,如果win32程序(在其他Windows7系统上正常工作)能够在使用Parallels在Mac Mini上的Windows7(32位)上运行时从SetWindowsHookEx获得有效的句柄?

这是调用API的Delphi XE4代码行

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>

我已尝试将这些级别设置为

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

并没有解决'拒绝访问'的问题。

注意:我通过包含

的.rc文件包含我的清单
1 24 "FFHotKeys.exe.manifest"

而不是Project&gt;下的Custom Manifest功能。选项。我有“启用运行时主题”和一个空白的自定义清单。我尝试了另一种方式,但略有不同.manifest内容。

注意:当我使用XN_Resource_Editor检查资源时,有一个“XP Theme Manifest”资源,其中包含了预期的XML。还有2个VCLSTYLE资源。 谢谢。

1 个答案:

答案 0 :(得分:1)

答案是肯定的,它应该并且确实适用于Parallels。

使用 XN_Resource_Editor 检查编译的EXE,澄清了问题。原来只删除了Project&gt;之前的.RES文件。构建导致资源被重新编译,因此测试结果令人困惑。更重要的是,当涉及RunTime主题时,Delphi XE4使用其默认清单。因此,解决方案是删除项目中的资源引用,而不是使用Project&gt;选项,应用程序,运行时主题,选择自定义清单,然后选择项目&gt;对EXE进行构建和代码签名,并从c:\ Program Files \ subdir。

下运行它
processorArchitecture="*" 

在清单中有效

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

在清单中有效。