Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как узнать системным параметрам оформления Windows


Автор: andrx 14.2.2006, 17:36
Подскажите пожалуйста,

можно ли средствами С# получить доступ (чтение) к системным параметрам оформления Windows - т.е. Свойства экрана, закладка Оформление ?

Если можно то как (если можно пример) ?

В процессе написания кода возникла необходимость учитывать эти параметры.

Извините, за название темы - правильно :
Как узнать системные параметры оформления Windows
(копировал smile)

Автор: Exception 14.2.2006, 18:05
Покопай в сторону API-функции GetSystemParametersInfo.

Автор: andrx 14.2.2006, 18:12
Exception
желательно чтобы можно было докопаться ТОЛЬКО средствами C# !
API уже в безвыходном случае.

Автор: Exception 14.2.2006, 18:25
Можно узнать конкретные параметры, которые тебе нужны?

Автор: andrx 14.2.2006, 18:33
да, конечно
в "Свойствах экрана" эти параметры называются :
1. Полоска прокрутки, мне нужна ее ширина.
2. Граница активного (...неактивного) окна, также необходима ширина.

Автор: mr.DUDA 14.2.2006, 20:57
См. WinAPI-шную функцию GetSystemMetrics, там всё (ну почти всё) можно узнать.
Код:

Код
using System;
using System.Runtime.InteropServices;

public class TestApp
{
    [DllImport("user32.dll")]
    static extern int GetSystemMetrics(int index);

    const int SM_CXEDGE = 45;
    const int SM_CXHTHUMB = 10;

    public static void Main()
    {
        int ширина_полосы_прокрутки = GetSystemMetrics(SM_CXHTHUMB);
        int граница_окна = GetSystemMetrics(SM_CXEDGE);
    }
}

Автор: Exception 14.2.2006, 23:05
[offtop]
Тебя чего-то в последнее время на русские буквы пробивает smile
[/offtop]

Автор: dronzo 14.2.2006, 23:13
А что если посмотреть класс SystemInformation в System.Windows.Forms ? Ширина полосы прокрутки наверное будет SystemInformation.VerticalScrollBarWidth (по крайней мере значение совпадает с возвращаемым GetSystemMetrics). Как быть с шириной границы окна непонятно. Предполагал, что ширина границы окна SystemInformation.SizingBorderWidth или SystemInformation.BorderSize или SystemInformation.FrameBorderSize, но результат всё время отличается от того, что возвращает GetSystemMetrics smile Може быть стоит повнимательней посмотреть ?

Автор: mr.DUDA 15.2.2006, 08:48
Цитата(dronzo @ 14.2.2006, 22:13 Найти цитируемый пост)
Може быть стоит повнимательней посмотреть ?

Смотря что нужно получить. А вообще Reflector-ом можно посмотреть, что там внутри класса SystemInformation... Скорее всего тот же GetSystemMetrics smile

P.S. русский язык рулит smile

Автор: andrx 15.2.2006, 15:30
Всем премного благодарен за участие!

dronzo Вы оказались правы, в System.Windows.Forms.SystemInformation действительно оказались все необходимые мне параметры, в том числе и граница окна - это FrameBorderSize, но с этим параметром дело обстоит так :
его минимальное значение 4, если в свойствах экрана установить ширину границы окна 0, то FrameBorderSize=4, если же устанавливать ширину границы окна начиная с 1, то FrameBorderSize = 3 + ширина границы окна.

(FrameBorderSize показывает ширину в пикселях, и даже если в свойствах экрана установить ширину границы окна 0 или 1, фактически она все равно составит 4 пикселя ) !

так что dronzo , спасибо, (пока что могу сказать только спасибо !)

Автор: arilou 15.2.2006, 16:26
dronzo
+1 Молодец!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)