Вы должны войти, чтобы создавать сообщения и темы.

checkbox который выводит значение из класса [Решено]

Доброй ночи.
Тест3.Result (Применяет твик) : Тест3.Reverse (Отменяет твик)
Нужен код, на подобии два варианта - то есть если Result уже применялся то в при следующем нажатии на checkbox применится Reverse
void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
Test3.Result(); (Надо что-то по типу Тест3.Result() : Тест3.Reverse)
}

Доброй 🌙
Так сделайте проверку этого твика, и если он применён, поставьте галочку сразу и вызовите Reverse. Если он не применялся, то галочка пуста и выполняется Result.

Сколько всего перепробовал, сделать без if - else не получается:( Помогите пожалуйста.

Ну, так проверка и пишется через if-else как без него-то?

За правильность оформления не ручаюсь, т.к. мало опыта. Примерно так:

Спойлер

static class Test3
{
    private static string CurrentKey = @"Software\Policies\Microsoft\Windows\Psched";

    public static void Checker(CheckBox checkbox)
    {
        using (RegistryKey key = Registry.LocalMachine.OpenSubKey(CurrentKey))
            checkbox.Checked = key?.GetValue("NonBestEffortLimit")?.ToString() == "0";
    }

    public static void Result()
    {
        using (RegistryKey key = Registry.LocalMachine.CreateSubKey(CurrentKey, true))
            key.SetValue("NonBestEffortLimit", 0);
    }
    public static void Reverse()
    {
        using (RegistryKey key = Registry.LocalMachine.CreateSubKey(CurrentKey, true))
            key.DeleteValue("NonBestEffortLimit");
    }
}

private void Form1_Load(object sender, EventArgs e)
{
    // При запуске программы проверка, применен ли уже твик "NonBestEffortLimit"=dword:00000000

    Test3.Checker(checkBox1);
}

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
        if (checkBox1.Checked)
            Test3.Result();
        else
            Test3.Reverse();
}

Добрый вечер, огромное вам спасибо, не болейте. Вопрос у меня странный почему Хачатур и вы присылаете код в формате:

using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"))
key?.SetValue("Start_TrackProgs", checkBox1.Checked ? 0 : 1);

Это влияет на оптимизацию? Ниже вариант рекомендует visual studio

using RegistryKey key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced");
key?.SetValue("Start_TrackProgs", checkBox1.Checked ? 0 : 1);

 

HiBro, оборачивай код, пожалуйста. В форме ответа есть специальная кнопка СкопированоCode Insert.

Извиняюсь. Как можно убрать этот заголовок при нажатии правой кнопкой мыши по форме? Не задевая ControlBox

Добрый вечер! Если я правильно понял. Нужно удалить контестное меню? То в класс формы вставить следующий код:

(работает в Form Core  и Framework)

public partial class Form1:Form {
    public Form1() {
        InitializeComponent();
    }
    const int WM_CONTEXTMENU = 0x007B;
    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_CONTEXTMENU)
            m.Result = IntPtr.Zero;
        else
            base.WndProc(ref m);
    }
}

 

Лайкнул Roman Anderson [anomal3]
Roman Anderson [anomal3]
Цитата: Михаил от 07.10.2020, 21:24

Добрый вечер! Если я правильно понял. Нужно удалить контестное меню? То в класс формы вставить следующий код:

(работает в Form Core  и Framework)

 
 
 
 
public partial class Form1:Form {
public Form1() {
InitializeComponent();
}
const int WM_CONTEXTMENU = 0x007B;
protected override void WndProc(ref Message m) {
if(m.Msg == WM_CONTEXTMENU)
m.Result = IntPtr.Zero;
else
base.WndProc(ref m);
}
}
public partial class Form1:Form { public Form1() { InitializeComponent(); } const int WM_CONTEXTMENU = 0x007B; protected override void WndProc(ref Message m) { if(m.Msg == WM_CONTEXTMENU) m.Result = IntPtr.Zero; else base.WndProc(ref m); } }
 
public partial class Form1:Form {
    public Form1() {
        InitializeComponent();
    }
    const int WM_CONTEXTMENU = 0x007B;
    protected override void WndProc(ref Message m) {
        if(m.Msg == WM_CONTEXTMENU)
            m.Result = IntPtr.Zero;
        else
            base.WndProc(ref m);
    }
}

 

Спасибо! Вопросы решены.