Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Запрет нажатия Windows комбинаций клавиш...


Автор: xXxSataNxXx 11.6.2010, 20:16
Как можно запретить нажатие таких комбинаций клавишь, как Ctrl+Alt+Delete,Ctrl+Esc,Alt+Tab и т.д.?

Автор: Pilger 11.6.2010, 21:14
Через реестр можно. Но в любой момент можно включить обратно.

Автор: xXxSataNxXx 11.6.2010, 22:06
Не, через реестр не подходит, надо сделать так, чтоб отключались комбинации вовремя запуска программы во весь экран, а когда сворачиваешь, то обратно включались...

Автор: Pilger 11.6.2010, 22:38
В виндоусах (не старых) эти кнопки в целях безопасности так просто заблокировать нельзя. Но через реестр можно отключать и включать когда угодно, если права есть.

Автор: xXxSataNxXx 11.6.2010, 23:20
Ну, допустим игры, во многих играх отключаются эти комбинаци клавиш, и пока из неё не выйдешь, они не действуют, а если на клаве есть дополнительные кнопки, типо переключение приложения, то можно свернуть игру, и тогда работаю эти комбинации клавиш, и у игр нет прав на управление реестром...

Автор: diadiavova 12.6.2010, 08:50
xXxSataNxXx, если речь о том, чтобы не срабатывали сочетания пока окно активно, просто надо перехватывать нажатие этих клавиш и в обработчике ничего не делать.

Автор: xXxSataNxXx 12.6.2010, 10:30
А можно намекнуть как это сделать, чтоб хотябы WinKey отключить... smile

Автор: diadiavova 12.6.2010, 10:48
Цитата(xXxSataNxXx @  12.6.2010,  11:30 Найти цитируемый пост)
А можно намекнуть как это сделать, чтоб хотябы WinKey отключить...

звиняюсь, пропёрся. Так не работает. От контрол+таба в принципе можно защититься установив свойство TopMost в True(видимо не совсем то что нужн, но всё же). На счёт остального не знаю.

Автор: xXxSataNxXx 12.6.2010, 10:51
Я нашёл 2 примера отключения, но у меня не работает, выдаёт ошибку
Код

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As String, ByVal fuWinIni As Long) As Long  
Private Const SPI_SCREENSAVERRUNNING = 97&  
Public Sub AllowKeys(bParam As Boolean)  
Dim lRetVal As Long, bOld As Boolean  
lRetVal = SystemParametersInfo(SPI_SCREENSAVERRUNNING, bParam, bOld, 0&)  
End Sub  
Private Sub Form_Load()  
Call AllowKeys(True) 'блокировка сочетаний  
End Sub  
Private Sub Form_Unload(Cancel As Integer)  
Call AllowKeys(False) 'разблокировка сочетаний  
End Sub  

Код

Const SPI_SCREENSAVERRUNNING = 97  
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _  
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As String, ByVal fuWinIni As Long) As Long  
Private Sub Command1_Click()  
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, "1", 0)  
End Sub  
Private Sub Command2_Click()  
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, "1", 0)  
End Sub  
Private Sub Form_Unload(Cancel As Integer)  
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, "1", 0)  
End Sub  

Может не работает в Visual Studio 2010, незнаю, но ошибка выходит, но не критическая...

Автор: diadiavova 12.6.2010, 12:08
Что-то мне подсказывает, что это код на VB6. Там некоторое вещи отличаются, например тип Long надо заменить на Integer, Call сейчас не используется, кроме того, судя по всему методы типа Form_Load - это обработчики событий, а в VB.Net обработчики назначаются немного иначе, да и сигнатура у них другая. Воспользуйся инструментом апгрейда кода.

Автор: Pilger 12.6.2010, 15:39
То, что ты дал, работает только на старых виндоусах. На XP и т.д. это не прокатит. CTRL+ALT+DEL так просто не заблокируешь. Я думаю тебя это больше всего интересовало. А вообще глобальное нажатие клавиш можно через хуки отлавливать.

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