Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

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

25.12.2016, 10:58. Показов 1373. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
Нашёл пример использования функции API SystemParametersInfo, но он на C++. При попытке его воспроизвести на VB.Net получаю следующее:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
При считывании получаем 1. Это ожидаемо.
При установке и проверке считыванием ожидаю получить 3, а получаю число очень похожее на адрес в памяти.

Добавлено через 15 часов 5 минут
Результата добился следующим образом:
в случае чтения использую объявление API функции таким образом:
VB.NET
1
2
3
 <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
в случае установки параметра, объявляю ту же функцию уже по-другому:
VB.NET
1
2
3
    <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
Естественно пришлось писать объявления одной и той же API-функции в двух разных приложениях. Возник вопрос:
а возможно ли объявить функцию разными способами в одном и том же приложении? Может быть существует другой подход к этой проблеме?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.12.2016, 10:58
Ответы с готовыми решениями:

ADOQuery Как установить значение параметра
Как установить значение параметра NULL и чтобы в запросе он передавал NULL. Результатом запроса становится -1 или 0, когда нужно чтобы...

Как для параметра реестра установить значение, содержащее строку "%SystemRoot%"?
Народ подскажите как в реестр прописать путь reg add &quot;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters&quot; /v...

Установить значение параметра агенту
Здравствуйте, нужно реализовать передачу значение параметра в другой параметр на другой вкладке, как это можно сделать? На основной...

4
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
26.12.2016, 14:06
так
VB.NET
1
2
3
<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
один и тот же описан
1
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
26.12.2016, 14:10  [ТС]
Цитата Сообщение от jkrnd Посмотреть сообщение
ByRef pvParam As IntPtr
Цитата Сообщение от jkrnd Посмотреть сообщение
ByVal pvParam As UInt32
Orlangur1991, или адрес и значение это одно и то же?
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
26.12.2016, 14:13  [ТС]
Вот пример
0
Лень — мое второе и
 Аватар для Orlangur
3228 / 2416 / 687
Регистрация: 28.11.2014
Сообщений: 3,601
Записей в блоге: 3
30.12.2016, 10:53
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Можно запихать их в разные классы и тогда можно будет вызывать одну и туже функцию с разными значениями из одной формы. К примеру:
Создадим 2 класса
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
А далее уже локально объявляем что и из какого класса вызываем, к примеру, кнопка считать
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        'SPI_GETFOCUSBORDERHEIGHT Retrieves the height, in pixels, of the top and bottom edges 
        'of the focus rectangle drawn with DrawFocusRect. 
        'The pvParam parameter must point to a UINT value.
        Dim sy As New sysparam1()
        Dim dwOut As UInt32 = 0
        If (sy.n(SPI_GETFOCUSBORDERHEIGHT, 0, dwOut, 0)) Then
            Label2.Text = dwOut.ToString
        End If
        If (sy.n(SPI_GETFOCUSBORDERWIDTH, 0, dwOut, 0)) Then
            Label4.Text = dwOut.ToString
        End If
    End Sub
Кнопка установить значение:
VB.NET
1
2
3
4
5
6
 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim sy As New sysparam2()
        Dim dwOut As UInt32 = 3
        Label2.Text = sy.n(SPI_SETFOCUSBORDERHEIGHT, 0, dwOut, 0).ToString
        Label4.Text = sy.n(SPI_SETFOCUSBORDERWIDTH, 0, dwOut, 0).ToString
    End Sub
Выглядит конечно не очень, но зато не надо 2 формы для этого заводить
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.12.2016, 10:53
Помогаю со студенческими работами здесь

Как передать значение параметра функции одного экзешника значению параметра функции другому екзешнику?
Здравствуйте! Ребята подскажите по такому вопросу. У меня есть консольное приложение в котором происходит копирование файлов из...

Рухнула Windows 8 на ноутбуке Dell. Как установить заново Windows 8 или Windows 7?
при попытке восстановить систему с widows 8 пишет что не удалось восстановить,ни одним из предлагаемых способов. запускаю установку с...

Как управлять уровнем системного звука Windows 7?
WinAPI, может быть, или дефолтная win-программа?

Установить для пользователя значение "FALSE" параметра "PasswordExpires" командой WMIC
wmic useraccount where &quot;name='имя_пользователя' &quot; set passwordexpires=false это строка не работает

Как увеличить объём системного диска средствами Windows 7?
Помогите прочитал тему как увеличить диск на винде7. Сделал все как описано удалил диск D а диск С увеличить не могу так как ***расширить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru