TatsuSheva Ответов: 1

Как отключить клавишу Windows


& gt;Привет,
Я хочу отключить клавишу Windows в c sharp, но не могу. Мне удалось скрыть панель задач и меню "Пуск", но не отключить клавишу Windows.
Вот код того, что я сделал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

using System.Windows.Forms;
using Microsoft.Win32;
namespace UserControl
{
    class Taskbar
    {
        [DllImport("user32.dll")]
    private static extern int FindWindow(string className, string windowText);

    [DllImport("user32.dll")]
    private static extern int ShowWindow(int hwnd, int command);

    [DllImport("user32.dll")]
    public static extern int FindWindowEx(int parentHandle, int childAfter, string className, int windowTitle);

    [DllImport("user32.dll")]
    private static extern int GetDesktopWindow();

    private const int SW_HIDE = 0;
    private const int SW_SHOW = 1;

    protected static int Handle
    {
        get
        {
            return FindWindow("Shell_TrayWnd", "");
        }
    }

    protected static int HandleOfStartButton
    {
        get
        {
            int handleOfDesktop = GetDesktopWindow();
            int handleOfStartButton = FindWindowEx(handleOfDesktop, 0, "button", 0);
            return handleOfStartButton;
        }
    }

    public Taskbar()
    {
        // hide ctor
    }

    public static void Show()
    {
        ShowWindow(Handle, SW_SHOW);
        ShowWindow(HandleOfStartButton, SW_SHOW);
        
    }

    public static void Hide()
    {
        ShowWindow(Handle, SW_HIDE);
        ShowWindow(HandleOfStartButton, SW_HIDE);
        
    }
        
    }
 
}


Я хочу, чтобы добавить кнопку Windows отключения в этом классе. И я должен быть в состоянии включить снова, если я закрою приложение.
Спасибо.

Что я уже пробовал:

Мне удалось скрыть панель задач и меню "Пуск", но не отключить клавишу Windows.

0x01AA

Я не уверен, что это хорошая практика, но Взгляните сюда...
Как отключить ключ Windows / PC Gamer[^]
или тоже здесь...
Отключить Ключ Windows | JohnHaller.com[^]
и здесь, в c# (но также и манипуляции с реестром)
как отключить ключ windows в c#? - переполнение стека[^]

Philippe Mori

Вы не должны этого делать. Хотели бы вы, чтобы кто-то сделал это на вашем собственном компьютере? Поэтому не делайте другим того, чего вы не хотите, чтобы другие делали вам.

TatsuSheva

Ха-ха, Не волнуйтесь, это проектная работа, я нахожусь в компании, и мой работодатель просит меня сделать это.

1 Ответов

Рейтинг:
1

BillWoodruff

См. этот поток на StackOverflow для различных методов: [^]

Однако...

Такого рода задачи часто встречаются при использовании Windows в режиме "киоска" или для управления пользовательским интерфейсом торговой точки или интернет-кафе, и я предлагаю вам исследовать их, если ваша цель действительно ограничить то, что пользователь может делать с клавиатурой (и/или мышью).

Но учтите, что отключение стандартного поведения клавиши Windows (или сочетания клавиш alt-tab по умолчанию и т. д.), вероятно, приведет некоторых пользователей в замешательство ... и/или разозлит.

Вы открывали и читали ссылки на "связанные вопросы", которые появляются на этой странице ?


TatsuSheva

публичный статический класс WindowsKey {
///


/// Отключает ключ Windows
///

/// & lt;Примечания>может потребовать от текущего пользователя выхода из системы или перезапуска системы
общественная статический недействительным отключить() {
RegistryKey key = null;
пробовать {
ключ = реестр.Местная машина.OpenSubKey ("\система\CurrentControlSet на\\управление\\раскладка клавиатуры", правда);
byte [] binary = новый байт[] {
От 0x00,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
0x03,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
От 0x00,
0x5B,
Это 0xe0,
От 0x00,
От 0x00,
0x5C,
Это 0xe0,
От 0x00,
От 0x00,
От 0x00,
От 0x00
};
ключ.SetValue ("Scancode Map", binary, RegistryValueKind.Двоичный);
}
улов (система.Исключение экс) {
Отлаживать.Assert(false, ex. ToString());
}
наконец {
ключ.Закрывать();
}
}

///
/// Включает компьютер
///

/// & lt;Примечания>может потребовать от текущего пользователя выхода из системы или перезапуска системы
публичный статический недействительными включить() {
RegistryKey key = null;
пробовать {
ключ = реестр.Местная машина.OpenSubKey ("\система\CurrentControlSet на\\управление\\раскладка клавиатуры", правда);
ключ.DeleteValue ("Scancode Map", true);
}
улов (система.Исключение экс) {
Отлаживать.Assert(false, ex. ToString());
}
наконец {
ключ.Закрывать();
}
}
}
Почему этот код не работает для меня ? Да, я читал и пытался использовать его в своем приложении, но так и не узнал.

BillWoodruff

Нет необходимости "сбрасывать" он-лайн код в комментарии. Есть и другие методы, показанные в этом потоке на StackOverflow.

TatsuSheva

Я нашел решение этой проблемы, но когда я запускаю приложение на C#, все ключи блокируются. Я больше не могу писать. Есть ли какое-то решение ?

BillWoodruff

Я предлагаю вам тщательно составить и разместить здесь еще один вопрос. Опишите, что вы сейчас делаете (мы не можем читать ваши мысли), и покажите код, который вы используете ... используйте параметры форматирования кода в Редакторе CP для форматирования кода.

твое здоровье, Билл