未知的SetProcessDpiAwareness错误结果

Nat*_*han 0 vb.net winapi hdpi

我有50台中的一台计算机从SetProcessDpiAwareness返回非零结果,我找不到任何关于它的信息.我将DPI意识设置为不知情.我有一台计算机返回值105621835743232(十进制).它似乎仍然将DPI Awareness设置为不应该意识到它应该但是会给出一个不期望的返回值.

Private Declare Function SetProcessDpiAwareness Lib "shcore.dll" (ByVal Value As PROCESS_DPI_AWARENESS) As Long

Private Function SetDPI() As Long
    'Results from SetProcessDPIAwareness
    'Const S_OK = &H0&
    'Const E_INVALIDARG = &H80070057
    'Const E_ACCESSDENIED = &H80070005
    Dim lngResult As Long
    lngResult = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware)
    Return lngResult

End Function
Run Code Online (Sandbox Code Playgroud)

这是一个clickonce winforms应用程序,所以我不能使用清单来设置DPI.

任何有关定位文档的帮助都会受到欢迎!

提前致谢.

Dav*_*nan 5

此API函数的返回值是32位整数,因此您应该使用Integer而不是Long.请注意,这Long是64位类型.

我也强烈建议使用p/invoke而不是Declare.后者出于兼容性原因而存在.P/invoke可以更好地控制导入过程.

  • 十进制105621835743232是十六进制0x0000601000000000.低32位全为0,这意味着该函数实际上返回的HRESULT为0x00000000,即S_OK:"*应用程序的DPI感知已成功设置.*" (4认同)