21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202
1

Заблокировать клавишу Windows

08.08.2010, 18:35. Показов 4813. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть у кого нибудь пример кода, позволяющего блокировать нажатия левой и правой кнопок Windows? Хочу создать себе программу на его основе. Буду очень благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2010, 18:35
Ответы с готовыми решениями:

Заблокировать клавишу в Windows
У меня есть хороший клавиатурный хук(код ниже) При нажатии определенной клавиши, срабатывает моя...

Заблокировать клавишу
Добрый вечер,уважаемые форумчане!У меня произошла некоторая проблема с моим ноутбуком,а точнее с...

Заблокировать клавишу в форме(1) после правельного ответа в другой(2) и возвращение в неё (1) или в начальную
Сталкнулся собственно с той проблемой что описано выше.Нужна помощь с реализацией,играть->вопрос...

Сохранить клавишу активной на клавиатуре в Windows 10
При зажатии какой-либо клавиши на клавиатуре производится ввод символа до момента отпускания, все...

4
687 / 601 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
08.08.2010, 18:38 2
если по английски понимаешь, вот тут есть про блокирование разных коомбинаций и функций и WinKey тоже
1
21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202
09.08.2010, 16:22  [ТС] 3
Цитата Сообщение от VelZeVuL Посмотреть сообщение
если по английски понимаешь, вот тут есть про блокирование разных коомбинаций и функций и WinKey тоже
Не помогло. С английским плохо наверное. Интересует не полное отключение этих клавиш, а блокирование нажатий во время запуска программы. По идее это легче реализовать.
0
687 / 601 / 139
Регистрация: 08.05.2009
Сообщений: 1,098
09.08.2010, 17:14 4
добавляешь референсы

C#
1
2
 using System.Diagnostics;  
using System.Runtime.InteropServices;
добавляешь этот код перед конструктором формы (перед public form1())

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[StructLayout(LayoutKind.Sequential)] 
private struct KBDLLHOOKSTRUCT   
{
public Keys key;
public int scanCode;
public int flags;
public int time;
public IntPtr extra;
}
 private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); 
 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
private static extern IntPtr SetWindowsHookEx(int id, LowLevelKeyboardProc callback, IntPtr hMod, uint dwThreadId);  
 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
 private static extern bool UnhookWindowsHookEx(IntPtr hook);  
 [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]  
private static extern IntPtr CallNextHookEx(IntPtr hook, int nCode, IntPtr wp, IntPtr lp);
 [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
 private static extern IntPtr GetModuleHandle(string name);  
 [DllImport("user32.dll", CharSet = CharSet.Auto)] 
 private static extern short GetAsyncKeyState(Keys key); 
 private IntPtr ptrHook; 
 private LowLevelKeyboardProc objKeyboardProcess;

в конструкторе формы пишешь это

C#
1
2
3
ProcessModule objCurrentModule = Process.GetCurrentProcess().MainModule;
objKeyboardProcess = new LowLevelKeyboardProc(captureKey); 
 ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName),0);
это метод который ловит нажатия клавиш и блокирует кнопки WinKney

C#
1
2
3
4
5
6
7
8
9
10
11
private IntPtr captureKey(int nCode, IntPtr wp, IntPtr lp)  
 {
if (nCode >= 0)  
 {  
 KBDLLHOOKSTRUCT objKeyInfo = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lp, typeof(KBDLLHOOKSTRUCT)); 
if (objKeyInfo.key == Keys.RWin || objKeyInfo.key == Keys.LWin) //вот тут и блокируется WinKey {   
 return (IntPtr)1;  
 } 
  } 
return CallNextHookEx(ptrHook, nCode, wp, lp);  
 }
для тог чтобы после закрытия твоей проги клавиша WinKey разблокировалась, идешь в деструкрор формы и пишешь

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
protected override void Dispose(bool disposing) 
 { 
 if (disposing && (components != null))
{ 
components.Dispose();  
 } 
 if (ptrHook != IntPtr.Zero) 
  {  
 UnhookWindowsHookEx(ptrHook);
 ptrHook = IntPtr.Zero;
}  
base.Dispose(disposing);
 }
в прицыпе есть другой способ, через удаление значения клавиши из реестра винды, но имхо он тебе не очень подходит
4
21 / 21 / 2
Регистрация: 14.10.2009
Сообщений: 202
09.08.2010, 19:24  [ТС] 5
Большое спасибо, что написал для меня довольно объемный код! =)

Это как раз то, что нужно.
0
09.08.2010, 19:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2010, 19:24
Помогаю со студенческими работами здесь

Как программно нажать клавишу Windows?
Знаю подобных вопросов на форуме много, но все же прочитав большую их часть, я не нашел ответа, как...

Почему Windows так реагирует на клавишу alt
Всем привет. Вообщем есть фича в винде такая, как создание невидимой папки. И в процессе ее...

Восстановление Windows 7, тыкая клавишу F9 во время загрузки BIOS
Всю жизнь было так: при загрузке с флешки были пункты "Восстановить" и "Выход" (выключить...

Заблокировать внешний ip на RDP (Windows Server 2008 r2)
Есть задача, заблокировать внешний ip (или диапазон ip) на роутере, чтобы c данных адресов небыло...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru