Состояние NumLock

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

Состояние NumLock

Сообщение Andrev » 08.10.2005 (Сб) 9:49

Только не надо отсылать в поиск - был я там. Все решения выдают либо НАЖАТИЕ NumLock, либо, вроде бы, его состояние, но эти вторые почему-то не работают - постоянно выдают True. Примерно то же самое дело обстоит с поиском по Яндексу.
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 08.10.2005 (Сб) 10:11

Cостаяние NUmLock, находится в байте по адресу BIOS 0040:0017, в 5 бите, если он 1 то намлок включён, 0 - выключен.
ЗЫ
Думаю есть ещё способы, наверняка есть API функция.
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.10.2005 (Сб) 12:41

Код: Выделить всё
Option Explicit

Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long) As Integer

Private Const VK_NUMLOCK As Long = &H90

Private Sub Form_Load()
  MsgBox GetKeyState(VK_NUMLOCK) And 1%
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrev
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 19.01.2005 (Ср) 9:22
Откуда: Kursk

Сообщение Andrev » 08.10.2005 (Сб) 14:44

Хе, уважаемый GSerg... Сам-то пробовал свой код? Выдает единицу что при включенном нумлоке, что при выключенном.
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.10.2005 (Сб) 14:52

Сам пробовал свой код. Выдаёт 1 при включенном и 0 при выключенном.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.10.2005 (Сб) 17:08

На всякий случай проверил код GSerg-а: работает корректно.
Причём у него Win98, а у меня Win2000. Другими словами, его код должен работать всюду.
Изображение

Andrev
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 19.01.2005 (Ср) 9:22
Откуда: Kursk

Сообщение Andrev » 08.10.2005 (Сб) 19:24

У меня двухтысячные винды, плюс второй сервис-пак, плюс несколько заплаток. И у меня код GSerg'а выдает единицу вне зависимости от того, включен numlock или нет.
Да! И еще... У меня в реестре ключ HKEY_USERS\.DEFAULT\Control Panel\Keyboard\InitialKeyboardIndicators (включать numlock при загрузке windows) установлен в 2. Может, из-за этого? Так ведь ворд и прочие эксели выдают реальное состояние нумлока... Как быть? Куды бечь?
В этой жизни нет ничего невозможного. Если у вас что-то не получается, значит, вы что-то делаете не так.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList