Как блокировать управление ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Darkstone
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 22.09.2003 (Пн) 12:26

Как блокировать управление ?

Сообщение Darkstone » 22.09.2003 (Пн) 12:31

Подскажите как из VB блокировать и разблокировать мышь и клаву.
ALT+CTL+DEl тоже.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 22.09.2003 (Пн) 14:03

Внутри приложения для блокировки клавиш нужно установить свойство формы Keyprew = true, и вылавливать комбинацию клавишь через событие keyup формы.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.09.2003 (Вт) 10:52

Только KeyDown, а не KeyUp.
Это для твоего приложения, а для системы выполни
Код: Выделить всё
"Shell "Rundll32.exe Mouse,Disable"
Shell "Rundll32.exe Keyboard,Disable"
Lasciate ogni speranza, voi ch'entrate.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.09.2003 (Вт) 13:59

Alibek -
Только KeyDown, а не KeyUp.


Почему KeyDown, а не KeyUp, наверно потому, что CTRL+ALT+DEL сабатывают во время нажатия на клавишу :?: :?: :?:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.09.2003 (Вт) 15:10

KeyDown срабатывает при нажатии на клавишу, KeyUp при ее отпускании
Lasciate ogni speranza, voi ch'entrate.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.09.2003 (Вт) 16:52

Alibek-
KeyDown срабатывает при нажатии на клавишу, KeyUp при ее отпускании

Не о том вопрос был задан, а о том комбинация Ctrl+alt+del срабатывает в момент нажатия или отпускания кнопок (естественно, в момент нажатия, почему-то сразу об этом не догадался :) )

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 23.09.2003 (Вт) 20:45

ВНИМАНИЕ! Следующий код использовать только в целях ознакомления! :) Никакой ответсвенности за всякие последствия я не несу. :D Я предупредил :)
Код: Выделить всё
  "Заморозить"/"Разморозить" курсор мыши
     Расположите на форме 2 элемента CommandButton. При нажатии на первую кнопку, курсор мыши
заморозится. При нажатии на вторую конпку - курсор снова будет активным. Используйте клавишу TAB
для перехода с фокуса первой кнопки на фокус второй.
------------------------------------
Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Private Sub Command1_Click()
ClipCursor Null
End Sub
Private Sub Command2_Click()
ClipCursor ByVal 0&
End Sub       

Заблокировать/Разблокировать любое окно в Win95/98/NT
     Расположите на форме 2 элемента CommandButton. В коде 'Call DisWin("Form1", ...)' замените
"Form1" на требуемое окно. После нажатия на кнопку в данном окне блокируются нажатия на кнопки
мыши и клавиатуры. Но вы можете поставить таймер на 20 секунд и вписать в событие Timer1_Timer()
код из второй кнопки.
------------------------------------
#If Win32 Then
Private Declare Function EnableWindow& Lib "user32" (ByVal hWnd As Long, ByVal fEnable As Long)
Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName As
String, ByVal lpWindowName As String)
#Else
Private Declare Function EnableWindow% Lib "user" (ByVal hWnd As Integer, ByVal aBOOL As
Integer)
Private Declare Function FindWindow% Lib "user" (ByVal lpClassName As Any, ByVal lpWindowName
As Any)
#End If
Function DisWin(WindowName$, EnabOrDisab&) 'EX: Call DisWin("mIRC32", 0)
Dim lFndWnd As Long
Dim lDisEnWnd As Long
lFndWnd = FindWindow(vbNullString, WindowName$) 'Finds the Window Name
lDisEnWnd = EnableWindow(lFndWnd, ByVal EnabOrDisab&) 'Disables all mouse and keyboard input to
the specified window.
'In ByVal EnabOrDisab& you either enter: 0 to Disable Window or 1 to Enable it.
End Function
Private Sub Command1_Click()
Call DisWin("Form1", 0)
End Sub
Private Sub Command2_Click()
Call DisWin("Form1", 1)
End Sub       


Поменять заголовки всех активных окон
     Данный пример поменяет заголовки всех активных окон, представленных на панели задач.

Расположите на форме элемент CommandButton. Изменив в событии Command1_Click() строковое
значение в скобках и нажав после запуска программы на кнопку, вы измените заголовки всех окон.
------------------------------------
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long,
ByVal lpString As String) As Long

Public Sub WindowCaptionChangeAll(NewText As String)
For nI = 1 To 10000
Call SetWindowText(nI, NewText)
Next
End Sub

Private Sub Command1_Click()
WindowCaptionChangeAll ("GARIK")
End Sub       





  Как заблокировать сочетания клавиш Ctrl+Alt+Del и Alt+Tab
     'ВАРИАНТ 1

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal
uAction As Long, ByVal uParam As Long, lpvParam As Any, 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

'ВАРИАНТ 2

'без дополнительной подпрограммы
'Добавьте два элемента CommandButton. Первая кнопка блокирует сочетание клавиш, вторая -
разрешает.
Const SPI_SCREENSAVERRUNNING = 97
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, 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



Спрятать/Показать кнопку "Пуск"
     Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As
Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long,
ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Sub Command1_Click()
'спрятать кнопку "Пуск"
OurParent& = FindWindow("Shell_TrayWnd", "")
OurHandle& = FindWindowEx(OurParent&, 0, "Button", vbNullString)
ShowWindow OurHandle&, 0
End Sub

Private Sub Command2_Click()
'показать кнопку "Пуск"
OurParent& = FindWindow("Shell_TrayWnd", "")
OurHandle& = FindWindowEx(OurParent&, 0, "Button", vbNullString)
ShowWindow OurHandle&, 5
End Sub





Скрыть/показать иконки рабочего стола
     Добавьте на форму 2 CommandButton. Первая кнопка спрячет ярлыки с рабочего стола, вторая -
покажет.
------------------------------------
'ВАРИАНТ 1
Private Declare Function ShowWindow& Lib "user32" (ByVal hWnd&, ByVal nCmdShow&)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long
Const SW_HIDE = 0
Const SW_NORMAL = 1

Private Sub Command1_Click()
Dim hHandle As Long
hHandle = FindWindow("progman", vbNullString)
Call ShowWindow(hHandle, SW_HIDE)
End Sub

Private Sub Command2_Click()
Dim hHandle As Long
hHandle = FindWindow("progman", vbNullString)
Call ShowWindow(hHandle, SW_NORMAL)
End Sub

'ВАРИАНТ 2
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long)
As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As
String, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Long, ByVal fEnable As Long)
As Long
Const SW_HIDE = 0
Const SW_SHOW = 5

Public Sub Desktop(Visible As Boolean)
Dim hWnd As Long
hWnd = FindWindow("Progman", "Program Manager")
If Visible Then
ShowWindow hWnd, SW_SHOW
Else
ShowWindow hWnd, SW_HIDE
End If
EnableWindow hWnd, Visible
End Sub

Private Sub Command1_Click()
Desktop False
End Sub

Private Sub Command2_Click()
Desktop True
End Sub
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Darkstone
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 22.09.2003 (Пн) 12:26

Сообщение Darkstone » 24.09.2003 (Ср) 7:29

alibek писал(а):Только KeyDown, а не KeyUp.
Это для твоего приложения, а для системы выполни
Код: Выделить всё
"Shell "Rundll32.exe Mouse,Disable"
Shell "Rundll32.exe Keyboard,Disable"


Указанные команды работают только на блокирование. При запуске их с параметром enable выдается ошибка. Вощем этот токо для заподлостроителей.

Darkstone
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 22.09.2003 (Пн) 12:26

Сообщение Darkstone » 24.09.2003 (Ср) 11:45

Tarik писал(а):------------------------------------
Private Declare Function ClipCursor Lib "user32" (lpRect As Any) As Long
Private Sub Command1_Click()
ClipCursor Null
End Sub
Private Sub Command2_Click()
ClipCursor ByVal 0&
End Sub
[/code]


Вот этот код имеет одну особенность. Почему то после компиляции в exe и его запуска при двойном клике LB на мышь открываеться меню "пуск", причём независимо от положение мыши. Как бы этого избежать ?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 8

    TopList