SetProcessDpiAwareness错误代码

时间:2016-05-11 16:30:23

标签: windows delphi dpi

我在我的Delphi XE7应用程序中添加了对SetProcessDpiAwareness窗口函数的调用(在动态加载shcore DLL之后)。我知道最好使用清单来设置DPIAware值,并且我已经将它分开工作并最终将使用它。但是在开发期间,我想使用命令行参数来设置DPIAwareness值,否则我必须重建应用程序才能更改此状态。

问题是SetProcessDpiAwareness返回错误代码$ 800700A0。 功能描述中没有记录,代码是什么意思?

啊我找到了它,感谢查看参数的答案,我已经声明函数类型错了,我有:

TSetDPIFunc = function(const PROCESS_DPI_AWARENESS):HRESULT; STDCALL;

但PROCESS_DPI_AWARENESS未定义为枚举。 更改为以下内容现在可以正常工作:

TSetDPIFunc = function(const x:Integer):HRESULT; STDCALL;

1 个答案:

答案 0 :(得分:1)

0x8007XXXX使用Win32 error code encapsulated in a COM HRESULT HRESULT_FROM_WIN32()WIN32_FROM_HRESULT(0x800700A0)提供0xA0,即错误代码160,即ERROR_BAD_ARGUMENTS(“一个或多个输入参数不正确”)。

虽然你得到这个错误但对我没有意义,因为这个函数甚至没有任何参数

所以我唯一能想到的就是它与the issue described here有关,假设您自己更改了DPI设置以进行测试,然后失败了:

  

因此,为了使SetProcessDPIAware(以及相关方法:SetProcessDpiAwareness()和manifest with true)正常工作,必须在更改DPI设置之后和运行程序之前注销并再次登录。

顺便说一下,如果这有用:在没有完全重建的情况下测试清单,可以使用mt.exe从命令行将清单附加到应用程序。