Keyboard LEDs

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Keyboard LEDs

Сообщение drronnie » 28.07.2003 (Пн) 0:43

Как мигнуть Scroll Lock?
У меня Хрюша стоит...
Компиляция - перевод словесного поноса в машинный код.

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 28.07.2003 (Пн) 12:18

Используй API-Guide:

Const VK_CAPITAL = &H14
Const VK_NUMLOCK = &H90
Const VK_SCROLL = &H91
Const VK_USED = VK_SCROLL
Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare Function GetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim kbArray As KeyboardBytes, CapsLock As Boolean, kbOld As KeyboardBytes
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'Get the current keyboardstate
GetKeyboardState kbOld
'Hide the form
Me.Hide
MsgBox "Keep your eyes on the little num-, shift- and scrolllock lights on the keyboard."
TurnOff VK_CAPITAL
TurnOff VK_NUMLOCK
TurnOff VK_SCROLL
Sleep 1000
TurnOn VK_NUMLOCK
Sleep 100
TurnOn VK_CAPITAL
Sleep 100
TurnOn VK_SCROLL
Sleep 300
TurnOff VK_NUMLOCK
Sleep 100
TurnOff VK_CAPITAL
Sleep 100
TurnOff VK_SCROLL
Sleep 500
TurnOn VK_NUMLOCK
TurnOn VK_SCROLL
Sleep 200
TurnOff VK_NUMLOCK
TurnOff VK_SCROLL
Sleep 200
TurnOn VK_NUMLOCK
TurnOn VK_SCROLL
Sleep 200
TurnOff VK_NUMLOCK
TurnOff VK_SCROLL
Sleep 200
TurnOn VK_CAPITAL
Sleep 200
TurnOff VK_CAPITAL
Sleep 200
TurnOn VK_CAPITAL
Sleep 200
TurnOff VK_CAPITAL
Sleep 200
TurnOn VK_NUMLOCK
TurnOn VK_SCROLL
Sleep 200
TurnOff VK_NUMLOCK
TurnOff VK_SCROLL
Sleep 200
TurnOn VK_NUMLOCK
TurnOn VK_SCROLL
Sleep 200
TurnOff VK_NUMLOCK
TurnOff VK_SCROLL
Sleep 200
TurnOn VK_CAPITAL
Sleep 400
TurnOff VK_CAPITAL
Sleep 200
TurnOn VK_NUMLOCK
Sleep 100
TurnOn VK_CAPITAL
Sleep 100
TurnOn VK_SCROLL
Sleep 300
TurnOff VK_SCROLL
Sleep 100
TurnOff VK_CAPITAL
Sleep 100
TurnOff VK_NUMLOCK
Sleep 1000
Unload Me
End Sub
Private Sub TurnOn(vkKey As Long)
'Get the keyboard state
GetKeyboardState kbArray
'Change a key
kbArray.kbByte(vkKey) = 1
'Set the keyboard state
SetKeyboardState kbArray
End Sub
Private Sub TurnOff(vkKey As Long)
'Get the keyboard state
GetKeyboardState kbArray
'change a key
kbArray.kbByte(vkKey) = 0
'set the keyboard state
SetKeyboardState kbArray
End Sub
Private Sub Form_Unload(Cancel As Integer)
'restore the old keyboard state
SetKeyboardState kbOld
End Sub

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 28.07.2003 (Пн) 12:22

У меня этот код даже под 2K не работает :(
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 28.07.2003 (Пн) 12:52

А если так:

Private Declare Sub GetKeyboardState Lib "USER32" (lpKeyState As Any)
Private Declare Sub SetKeyboardState Lib "USER32" (lpKeyState As Any)
' Указатель на элемент массива lpKeyState (256 байтов),
' соответствующий клавише NumLock.
Const VK_NUMLOCK = &h90

' Возвращает состояние клавиши NumLock:
' True = ВКЛ, False = ВЫКЛ
Private Function NumLock() As Boolean
' Создать массив для хранения состояний клавиш
' (256 байтов = 128 целых).
Dim lpbKeyState(128) As Integer
' Прочитать параметры состояния клавиши.
GetKeyboardState lpbKeyState(0)
' Проверить элемент массива VK_NUMLOCK.
If (lpbKeyState(VK_NUMLOCK / 2)) Then
NumLock = True
Else
NumLock = False
End If
End Function

' Изменяет состояние клавиши NumLock: True = ВКЛ, False = ВЫКЛ
Private Function NumLock(bState) As Boolean
' Создать массив для хранения состояний клавиши
' (256 байтов = 128 целых).
Dim lpbKeyState(128) As Integer
' Прочитать параметры состояния клавиши.
GetKeyboardState lpbKeyState(0)
' Если текущее состояние совпадает с bState,
' ничего не менять.
If (lpbKeyState(VK_NUMLOCK / 2)) And bState Then Exit Function
' В противном случае установить в массиве правильное значение.
If bState Then
(lpbKeyState(VK_NUMLOCK / 2) = 1
Else
(lpbKeyState(VK_NUMLOCK / 2) = 0
End If
' Установить состояние клавиатуры.
SetKeyboardState lpbKeyState(0)
End Function

MEMBER
Гугль
Гугль
 
Сообщения: 758
Зарегистрирован: 29.11.2002 (Пт) 12:02
Откуда: 10 этаж

Сообщение MEMBER » 28.07.2003 (Пн) 13:14

Код: Выделить всё
Option Explicit
Private Const VK_CAPITAL = &H14
Private Const KEYEVENTF_KEYUP = &H2
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'------------------
Private Sub Command1_Click()
   CAPToggle
End Sub
'------------------
Private Sub CAPToggle()
   Dim shiftscan%
   shiftscan% = MapVirtualKey(VK_CAPITAL, 0)
   keybd_event VK_CAPITAL, shiftscan%, 0, 0
   keybd_event VK_CAPITAL, shiftscan%, KEYEVENTF_KEYUP, 0
End Sub
Господа! Пользуйтесь www.ya.ru
ЗЫ и www.planetsourcecode.com

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

Сообщение alibek » 28.07.2003 (Пн) 13:54

А никто не знает, как моргать только индикаторами, не изменяя статуса клавиатуры?
Поясню: во всех перечисленных способах, если одна программа будет "моргать" CapsLock'ом, а в другой программе вводить какой-то текст, то получится БоЛьШоЙ пРиКоЛ :)
Но у меня как-то был плугин к WinAmp, который выводил эквалайзер на LED'ы клавиатуры (NumLock басы, CapsLock средние и ScrollLock высокие частоты). И при этом текст вводился нормально и NumPad работал как положено. Т.е. плугин включал только лампочки и все (а это уже не SetKeyboardState).
Lasciate ogni speranza, voi ch'entrate.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 29.07.2003 (Вт) 0:23

спасибо... а как на счёт того, что alibek спрашивает?
Компиляция - перевод словесного поноса в машинный код.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Majestic-12 [Bot] и гости: 4

    TopList