Что нового

Проверка 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,322
C2H5OH,
Код:
#include <WinAPIEx.au3>;см. мою подпись

$fCapsLock = _CapsLock_On()
If @error Then
	MsgBox(16, 'Error', '_CapsLock_On')
Else
	If $fCapsLock Then
		MsgBox(48, 'Info', 'Caps Lock включен')
	Else
		MsgBox(64, 'Info', 'Caps Lock выключен')
	EndIf
EndIf

Func _CapsLock_On()
	Local $i_State = _WinAPI_GetKeyState(0x14);$VK_CAPITAL из APIConstants.au3
	If @error Then Return SetError(@error)
	Return (BitAND($i_State, 1) <> 0)
EndFunc   ;==>_CapsLock_On
 
Автор
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:
 
Верх