Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Раскладка и CapsLock Добавлено: 08.05.03 14:34  

Автор вопроса:  Padre  | Web-сайт: localhost | ICQ: 346632205 
Как программно отключить CapsLock и перейти на определённую(!) раскладку клавиатуры?

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 DAN



ICQ: 234826 

Вопросов: 10
Ответов: 124
 Web-сайт: visualbasic.boom.ru
 Профиль | | #1
Добавлено: 08.05.03 22:57

Узнай. Если CapsLock включён, то пошли SendKeys с кодом Caps Lock'а.

Удачи!

 

http://visualbasic.boom.ru

Ответить

Номер ответа: 2
Автор ответа:
 Padre



ICQ: 346632205 

Вопросов: 25
Ответов: 215
 Web-сайт: localhost
 Профиль | | #2
Добавлено: 09.05.03 00:23

Тогда ещё один нескромный вопрос. Как узнать включён ли  CapsLock или нет и какой код у него?

Ответить

Номер ответа: 3
Автор ответа:
 Justas



ICQ: 259418212 

Вопросов: 24
Ответов: 325
 Web-сайт: justas.newmail.ru
 Профиль | | #3
Добавлено: 11.05.03 05:33

Может поможет?  

Нашёл где-то на HiProg.com (точнее не помню)

'//////////////////////////////////////////////////

Чтобы активировать или деактивировать индикацию Num Lock, Caps Lock или Scroll Lock на клавиатуре, надо использовать API функцию SetKeyboardState. В этой функции используется такой тип данных как Byte. Visual Basic поддерживает этот тип данных, но вместо него мы будем передавать пользовательский тип данных, в котором будет содержаться массив с состоянием клавиш. Сначала создадим новый проект и объявим API функцию, константы и пользовательский тип данных в коде формы:

Private Declare Function SetKeyboardState Lib "user32" (kbArray As KeyboardBytes) As Long ' вместо типа данных Byte мы ставим пользовательский тип данных KeyboardBytes

Private Const VK_NUMLOCK = &H90
Private Const VK_CAPITAL = &H14
Private Const VK_SCROLL = &H91

Private Type KeyboardBytes
kbByte(0 To 255) As Byte
End Type

Private kbArray As KeyboardBytes

Теперь добавим в массив kbArray состояния клавиш Num Lock, Caps Lock или Scroll Lock. Но прежде этого добавьте на форму таймер (Tmr) с интервалом 300 и в событие Timer напишите:

Private Sub Tmr_Timer()
kbArray.kbByte(VK_NUMLOCK) = (Rnd * 1) \ 1
kbArray.kbByte(VK_CAPITAL) = (Rnd * 1) \ 1
kbArray.kbByte(VK_SCROLL) = (Rnd * 1) \ 1
SetKeyboardState kbArray
End Sub

Теперь всё готово. После запуска вашего проекта индикаторы Num Lock, Caps Lock и Scroll Lock будут беспорядочно мигать. Это будет происходить потому, что значение состояния клавиши у нас получается равным либо 0, либо 1 (из - за функции лучайных чисел Rnd).

'//////////////////////////////////////////////////

   Юзай на здоровье...

Ответить

Номер ответа: 4
Автор ответа:
 Padre



ICQ: 346632205 

Вопросов: 25
Ответов: 215
 Web-сайт: localhost
 Профиль | | #4
Добавлено: 11.05.03 19:34

Премного благодарствую.

Сейчас проверю

Ответить

Номер ответа: 5
Автор ответа:
 Padre



ICQ: 346632205 

Вопросов: 25
Ответов: 215
 Web-сайт: localhost
 Профиль | | #5
Добавлено: 11.05.03 22:21

Блин... либо я чего то не догоняю, либо ещё какя есть причина, но конкретно под ХР ни этот пример, ни пример из API_Guide не работает

Ответить

Номер ответа: 6
Автор ответа:
 hedgehog



ICQ: 175571327 

Вопросов: 15
Ответов: 207
 Web-сайт: ezh.ru
 Профиль | | #6
Добавлено: 11.05.03 23:44

С локами более-менее все рассказали, а с раскладками можешь использовать это:

Private Declare Function ActivateKeyboardLayout Lib "user32" _
(ByVal HKL As Long, ByVal flags As Long) As Long

Private Const kbLayoutRus As Long = 68748313
Private Const kbLayoutEng As Long = 67699721

Public Function SetKeyboardLayout(Optional Russian As Boolean) As Long
    If Russian Then
        SetKeyboardLayout = ActivateKeyboardLayout&;(kbLayoutRus, 0)
    Else
        SetKeyboardLayout = ActivateKeyboardLayout&;(kbLayoutEng, 0)
    End If
End Function

У меня работает везде без проблем

Ответить

Номер ответа: 7
Автор ответа:
 Padre



ICQ: 346632205 

Вопросов: 25
Ответов: 215
 Web-сайт: localhost
 Профиль | | #7
Добавлено: 12.05.03 19:38
Thnx, hedgehog

Ответить

Номер ответа: 8
Автор ответа:
 d-ovs



Вопросов: 1
Ответов: 8
 Профиль | | #8 Добавлено: 06.09.10 14:57
Тогда ещё один нескромный вопрос. Как узнать включён ли CapsLock или нет и какой код у него?




Ну, не знаю, что это у Вас за методы, но я лично делаю так:
  1. Public Class Form1
  2.     Dim k As New Microsoft.VisualBasic.Devices.Keyboard
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         k.CapsLock ' объект клавиатуры, в котором есть свойство CapsLock, если оно равно True, то он нажат, иначе не нажат!
  5.     End Sub
  6. End Class

Ответить

Номер ответа: 9
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #9 Добавлено: 06.09.10 18:56
лично ты страдаешь херней с поднятием темы семилетней давности

Ответить

Номер ответа: 10
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #10 Добавлено: 06.09.10 18:57
к тому же, ты дважды страдаешь херней, ибо состояние капса проще узнать в My.Keyboard.CapsLock

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам