Неизвестный результат ошибки SetProcessDpiAwareness

У меня есть 1 компьютер из 50, который возвращает ненулевой результат из SetProcessDpiAwareness, и я не могу найти на нем никакой информации. Я устанавливаю DPI Awareness на Unaware. У меня есть один компьютер, который возвращает значение 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

Это приложение winforms для clickonce, поэтому я не могу использовать манифест для установки DPI.

Любая помощь с поиском документации будет приветствоваться!

Заранее спасибо.

1 ответ

Решение

Возвращаемое значение этой функции API является 32-битным целым числом, поэтому вы должны использовать Integer скорее, чем Long, Обратите внимание, что Long это 64-битный тип.

Я также настоятельно рекомендую использовать p/invoke, а не Declare, Последний существует по причинам совместимости. P/invoke предлагает гораздо больший контроль над процессом импорта.

Другие вопросы по тегам