Vb.net 未知的SetProcessDpiAwareness错误结果

Vb.net 未知的SetProcessDpiAwareness错误结果,vb.net,winapi,hdpi,Vb.net,Winapi,Hdpi,我有50台计算机中的1台正在从SetProcessdPiaware返回非零结果,我找不到任何关于它的信息。我正在将DPI感知设置为Unknowledge。我有一台计算机返回的值是105621835743232(十进制)。它似乎仍然像应该的那样将DPI感知设置为Unknowledge,但给出了一个不期望的返回值 Private Declare Function SetProcessDpiAwareness Lib "shcore.dll" (ByVal Value As PROCESS_DPI_A

我有50台计算机中的1台正在从SetProcessdPiaware返回非零结果,我找不到任何关于它的信息。我正在将DPI感知设置为Unknowledge。我有一台计算机返回的值是105621835743232(十进制)。它似乎仍然像应该的那样将DPI感知设置为Unknowledge,但给出了一个不期望的返回值

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
这是clickonce winforms应用程序,因此我无法使用清单设置DPI

我们非常欢迎任何关于查找文档的帮助


提前感谢。

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


我还强烈建议使用p/invoke而不是
Declare
。后者的存在是出于兼容性的原因。P/invoke提供了对导入过程更大的控制

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


我还强烈建议使用p/invoke而不是
Declare
。后者的存在是出于兼容性的原因。P/invoke提供了对导入过程更大的控制

十进制105621835743232为十六进制0x00006100000000。较低的32位都是0,这意味着函数实际上返回0x00000000的HRESULT,也就是S_OK:“应用程序的DPI感知已成功设置。”感谢您的关注。我读了很多关于这个调用的文档,但没有注意到返回值是32位整数这一事实。这就更能解释为什么即使返回非零数字,它仍能工作。十进制105621835743232是十六进制0x00006100000000。较低的32位都是0,这意味着函数实际上返回0x00000000的HRESULT,也就是S_OK:“应用程序的DPI感知已成功设置。”感谢您的关注。我读了很多关于这个调用的文档,但没有注意到返回值是32位整数这一事实。这就解释了为什么即使返回的是非零数,它仍然可以工作。