Что нового

Проверка Caps Lock

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
День добрый!

У меня возникает необходимость проверить нажат ли Caps Lock.
Для этого я использую _WordPropertyGet.
Что не очень удобно, так как для её использования приходится запускать Word.
И, на мой взгляд, совсем некорректно - а если на компе вообще ворда нет, что и Caps Lock тогда не работает?

Можно ли как-то проверять статус Caps Lock (Num Lock) напрямую, без привязки к Word ?
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
http://autoit-script.ru/index.php?topic=2233.0

Код:
TraySetToolTip("Индикатор за режима на клавиятура")

While 1
 Sleep(100)

  $STATE=DllCall('user32.dll','int','GetKeyState','int',0x90)
  If BitAND($STATE[0],1)=0 Then
   TraySetState(8)
  Else
   TraySetState(4)
  EndIf

  DllCall('user32.dll','int','keybd_event','int',0x14,'int',0,'int',0x02,'ptr',0)
  $STATE=DllCall('user32.dll','int','GetKeyState','int',0x14)
  If BitAND($STATE[0],1)=0 Then
   $Icon=75
  Else
   $Icon=73
  EndIf
  TraySetIcon("shell32.dll",-($Icon+($Icon>-1)))
 WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Спасибо!
Попробую оба варианта.
Только зачем вы всё время BitAND используете? Просто If _WinAPI_GetKeyState(0x14) не прокатит?

А где можно посмотреть списки функций в библиотеках? (в той же 'user32.dll')
И зачем вы проверяете ошибки после вызова _WinAPI_GetKeyState(0x14) ? В какой ситуации тут может появиться ошибка?

WinAPIEx.au3 не входит в комплект 3.3.6.1, у меня AutoIT не находит её. :(
А вот с DllCall всё получилось. :smile:
 
Верх