Как установить значение системного параметра Windows? - Visual Basic .NET
Формулировка задачи:
Всем здравствуйте.
Нашёл пример использования функции API SystemParametersInfo, но он на C++. При попытке его воспроизвести на VB.Net получаю следующее:
При считывании получаем 1. Это ожидаемо.
При установке и проверке считыванием ожидаю получить 3, а получаю число очень похожее на адрес в памяти.
в случае установки параметра, объявляю ту же функцию уже по-другому:
Естественно пришлось писать объявления одной и той же API-функции в двух разных приложениях. Возник вопрос:
а возможно ли объявить функцию разными способами в одном и том же приложении? Может быть существует другой подход к этой проблеме?
Листинг программы
- Imports System.Runtime.InteropServices
- Public Class Form1
- Public Const SPI_GETFOCUSBORDERWIDTH As UInt32 = 8206
- Public Const SPI_SETFOCUSBORDERWIDTH As UInt32 = &H200F
- Public Const SPI_GETFOCUSBORDERHEIGHT As UInt32 = 8208
- Public Const SPI_SETFOCUSBORDERHEIGHT As UInt32 = &H2011
- <DllImport("user32.dll", SetLastError:=True)> _
- Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
- End Function
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'вернуть значение
- Dim fResult As Boolean
- Dim dwOut As UInt32 = 0
- fResult = SystemParametersInfo(SPI_GETFOCUSBORDERHEIGHT, 0, dwOut, 0)
- Label1.Text = dwOut.ToString
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- 'установить значение
- Dim fResult As Boolean
- Dim dwOut As UInt32 = 3
- fResult = SystemParametersInfo(SPI_SETFOCUSBORDERHEIGHT, 0, dwOut, 0)
- End Sub
- End Class
Результата добился следующим образом:
в случае чтения использую объявление API функции таким образом:
Листинг программы
- <DllImport("user32.dll", SetLastError:=True)> _
- Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
- End Function
Листинг программы
- <DllImport("user32.dll", SetLastError:=True)> _
- Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByVal pvParam As UInt32, ByVal fWinIni As UInt32) As Boolean
- End Function
Решение задачи: «Как установить значение системного параметра Windows?»
textual
Листинг программы
- Public Class sysparam1
- Public Sub New()
- End Sub
- <DllImport("user32.dll", SetLastError:=True)> _
- Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
- End Function
- Function n(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
- n = SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni)
- End Function
- End Class
- Public Class sysparam2
- Public Sub New()
- End Sub
- <DllImport("user32.dll", SetLastError:=True)> _
- Public Shared Function SystemParametersInfo(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByVal pvParam As UInt32, ByVal fWinIni As UInt32) As Boolean
- End Function
- Function n(ByVal uiAction As UInt32, ByVal uiParam As UInt32, ByRef pvParam As IntPtr, ByVal fWinIni As UInt32) As Boolean
- n = SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni)
- End Function
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д