Как установить значение системного параметра Windows? - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Нашёл пример использования функции API SystemParametersInfo, но он на C++. При попытке его воспроизвести на VB.Net получаю следующее:
Листинг программы
  1. Imports System.Runtime.InteropServices
  2. Public Class Form1
  3. Public Const SPI_GETFOCUSBORDERWIDTH As UInt32 = 8206
  4. Public Const SPI_SETFOCUSBORDERWIDTH As UInt32 = &H200F
  5. Public Const SPI_GETFOCUSBORDERHEIGHT As UInt32 = 8208
  6. Public Const SPI_SETFOCUSBORDERHEIGHT As UInt32 = &H2011
  7. <DllImport("user32.dll", SetLastError:=True)> _
  8. Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
  9. End Function
  10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  11. 'вернуть значение
  12. Dim fResult As Boolean
  13. Dim dwOut As UInt32 = 0
  14. fResult = SystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, dwOut, 0)
  15. Label1.Text = dwOut.ToString
  16. End Sub
  17. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  18. 'установить значение
  19. Dim fResult As Boolean
  20. Dim dwOut As UInt32 = 3
  21. fResult = SystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, dwOut, 0)
  22. End Sub
  23. End Class
При считывании получаем 1. Это ожидаемо. При установке и проверке считыванием ожидаю получить 3, а получаю число очень похожее на адрес в памяти.
Результата добился следующим образом: в случае чтения использую объявление API функции таким образом:
Листинг программы
  1. <DllImport("user32.dll", SetLastError:=True)> _
  2. Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
  3. End Function
в случае установки параметра, объявляю ту же функцию уже по-другому:
Листинг программы
  1. <DllImport("user32.dll", SetLastError:=True)> _
  2. Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByVal pvParam As UInt32, ByVal fWinIni As UInt32) As Boolean
  3. End Function
Естественно пришлось писать объявления одной и той же API-функции в двух разных приложениях. Возник вопрос: а возможно ли объявить функцию разными способами в одном и том же приложении? Может быть существует другой подход к этой проблеме?

Решение задачи: «Как установить значение системного параметра Windows?»

textual
Листинг программы
  1. Public Class sysparam1
  2.     Public Sub New()
  3.  
  4.     End Sub
  5.     <DllImport("user32.dll", SetLastError:=True)> _
  6.     Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
  7.     End Function
  8.     Function n(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
  9.         n = SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni)
  10.     End Function
  11. End Class
  12. Public Class sysparam2
  13.     Public Sub New()
  14.  
  15.     End Sub
  16.     <DllImport("user32.dll", SetLastError:=True)> _
  17.     Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByVal pvParam As UInt32, ByVal fWinIni As UInt32) As Boolean
  18.     End Function
  19.     Function n(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
  20.         n = SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni)
  21.     End Function
  22. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы