Delphi DpiAware在役应用

Delphi DpiAware在役应用,delphi,winapi,windows-services,delphi-10.3-rio,dpi-aware,Delphi,Winapi,Windows Services,Delphi 10.3 Rio,Dpi Aware,我有一本书。下面的清单文件已正确嵌入到Delphi应用程序中,但应用程序仍然不知道dpi,例如,当拍摄dpi为125%的屏幕截图时,捕获不会考虑整个桌面。已经将Delphi应用程序作为一个普通应用程序执行,一切正常 如何使Delphi应用程序(即C++服务)DPIAX. program Project1; {$APPTYPE CONSOLE} {$DYNAMICBASE ON} {$D+} {$R *.res} uses System.SysUtils; begin try

我有一本书。下面的清单文件已正确嵌入到Delphi应用程序中,但应用程序仍然不知道dpi,例如,当拍摄dpi为125%的屏幕截图时,捕获不会考虑整个桌面。已经将Delphi应用程序作为一个普通应用程序执行,一切正常

如何使Delphi应用程序(即C++服务)DPIAX.

program Project1;

{$APPTYPE CONSOLE}
{$DYNAMICBASE ON}
{$D+}
{$R *.res}

uses
  System.SysUtils;

begin
  try
    // Screenshot code
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.


对/下午

您删除了有趣的代码:如何拍摄屏幕快照。如果你希望得到一个好的答案,请添加它。@ FPIET,任何截屏代码在这种情况下都会有相同的行为,这里不相关。你确定问题不在你的C++服务中吗?基于MSDN
CreateProcessAsUser不会将指定用户的配置文件加载到HKEY_用户注册表项中。因此,要访问HKEY_CURRENT_用户注册表项中的信息,必须在调用CreateProcessAsUser之前,使用LoadUserProfile函数将用户的配置文件信息加载到HKEY_用户中。请确保在新进程退出后调用UnloadUserProfile。
因此,您的进程可能无法读取特定用户的DPI设置。@Coringa如果使用每监视器和每监视器模式,应用程序负责通过react to
WM_DPICHANGED
处理DPI缩放。那么,作为服务运行时,您是否可以收到此消息?“你如何处理它?”RITAHAN-MSFT,我解决了我的问题,使C++服务意识到DPI。谢谢大家的帮助:DYou删除了有趣的代码:如何拍摄屏幕截图。如果你希望得到一个好的答案,请添加它。@ FPIET,任何截屏代码在这种情况下都会有相同的行为,这里不相关。你确定问题不在你的C++服务中吗?基于MSDN
CreateProcessAsUser不会将指定用户的配置文件加载到HKEY_用户注册表项中。因此,要访问HKEY_CURRENT_用户注册表项中的信息,必须在调用CreateProcessAsUser之前,使用LoadUserProfile函数将用户的配置文件信息加载到HKEY_用户中。请确保在新进程退出后调用UnloadUserProfile。
因此,您的进程可能无法读取特定用户的DPI设置。@Coringa如果使用每监视器和每监视器模式,应用程序负责通过react to
WM_DPICHANGED
处理DPI缩放。那么,作为服务运行时,您是否可以收到此消息?“你如何处理它?”RITAHAN-MSFT,我解决了我的问题,使C++服务意识到DPI。谢谢大家的帮助:D
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
    xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
    type="win32"
    name="MrTheV Dev"
    version="11.0.2804.9245"
    processorArchitecture="*"/>
    <trustInfo
        xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="False"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
    <compatibility
        xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
            <!-- Windows 10 -->
            <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
            <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
            <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
            <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        </application>
    </compatibility>
    <asmv3:application>
        <asmv3:windowsSettings
            xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
            <dpiAware>true/PM</dpiAware>
        </asmv3:windowsSettings>
    </asmv3:application>
</assembly>