суббота, 30 августа 2014 г.

Описание API вызова библиотеки FlashKbdLeds.DLL


Данная библиотека (далее DLL) для работы с любыми клавиатурами через SetupAPI в ОС NT/2000/2003/XP/7/8/10, предоставляет универсальный доступ для прямого управления светодиодами заданной (n-й) клавиатуры без нажатия клавиш CapsLOCK, ScrollLOCK, NumLOCK из других приложений вне зависимости от языка в среде Win OS 32/64 bit.




Для использования DLL в своих проектах соблюдайте соглашение об stdcall- вызовах. Тип соглашения о вызове объявляется после прототипа функции, будь то объявление функционального типа или же объявление функции.

Таблица расшифровок входных и выходных параметров экспортируемой функции 'setgetled_keyboard()' библиотеки 'FlashKbdLeds.DLL':
Параметр    Функционал            Тип переменной
==============================================================
numkey        [in] индекс/номер клавиатуры     Integer
scroll        [in] cветодиод Scroll Lock    Boolean
num        [in] cветодиод Num Lock        Boolean
caps        [in] cветодиод Caps Lock    Boolean
RESULT        [out] количество клавиатур    Integer
Пример динамического подключения (Delphi 6/7/2006/2009/2010/TDL/XE5-7):
var setgetled_keyboard: function(numkey: integer;
                                 scroll, num, caps: boolean): integer; stdcall;
    LibHandle: THandle;


function LinkProc(ProcName: string): Pointer;
begin
 result:= GetProcAddress(LibHandle, PChar(ProcName))
end;

{ инициализация }
begin
 LibHandle:= LoadLibrary('FlashKbdLeds.dll');
 if LibHandle<>0 then
  setgetled_keyboard:= LinkProc('setgetled_keyboard');
...

{ пример вызова (записи) }
var k: integer;
begin
 k:= setgetled_keyboard(keyn.Value,     // индекс/номер клавиатуры
                    checkbox1.Checked,  // scroll
                    checkbox2.Checked,  // num
                    checkbox3.Checked); // caps
 sb.Panels[0].Text:= format('Количество клавиатур: %d', [k]);
 ...
Пример вызова (под VBS):
' FlashKbdLeds.VBS
' Демонстрационный скрипт прямого управления светодиодами заданной клавиатуры
' без нажатия клавиш CapsLOCK, ScrollLOCK, NumLOCK
' · cветодиод CapsLOCK = Left
' · cветодиод ScrollLOCK = Right
' · cветодиод NumLOCK = Down
'
' Разработчик: Бадло Сергей Григорьевич aka raxp
' H-page: http://raxp.radioliga.com
'
' Зависимости:
' · Win OS 32/64-bit
' · COM-сервер DynWrapx.dll
' · SAPI (для озвучивания используется интерфейс по-умолчанию)
' · Клавиатура - одна или несколько
'
' Региcтрация интерфейсов (обязательно первично однократно):
' · в данном скрипте задайте номер клавиатуры для управления
' · запустите regdynwrapx.bat (на Windows Vista/7/8/8.1 запускать правой кнопкой мыши от имени Администратора)
' Использование:
' · запустите runFlashKbdIndicators.cmd
' · для завершения нажмите 'Escape'

' подключаем голосовое сопровождение
' при надоедливости голоса speakon = false
Dim Speak
speakon = true ' разрешаем голосовое сопровождение
Set Speak = CreateObject("sapi.spvoice")
' регистрируем COM объект DynamicWrapperX в тихом режиме
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("regsvr32.exe dynwrapx.dll /s"),3, true
' создаем объект DynamicWrapperX
Set Wrap = CreateObject("DynamicWrapperX.2")
Wrap.Register "user32.dll", "GetAsyncKeyState", "i=l", "f=s", "r=l"
Wrap.Register "FlashKbdLeds.dll", "setgetled_keyboard", "i=lbbb", "f=s", "r=l"

num = false
scroll = false
caps = false
key = 1

' Информируем пользователя о начале работы
if (speakon = true) then
Speak.Speak "Готов измываться над свето дио дами."
res = Wrap.setgetled_keyboard(0, false, false, false)
Speak.Speak "Количество клавиатур: "&res&"."
End if

p = true

' запускаем бесконечный цикл по условию нажатия 'Escape' с задержкой
Do While Wrap.GetAsyncKeyState(27) = "0"

'задержка на кол-во миллисекунд
WScript.Sleep 500

' отлавливаем нажатие Down
downt = Wrap.GetAsyncKeyState(40)
' отлавливаем нажатие Left
leftt = Wrap.GetAsyncKeyState(37)
' отлавливаем нажатие Right
rightt = Wrap.GetAsyncKeyState(39)

if (downt = "1") then
 num = not num

 ' озвучиваем
 if (speakon = true) then
  if (num = true) then
   Speak.Speak "Num Lock включен."
  End if
  if (num = false) then
   Speak.Speak "Num Lock выключен."
  End if
 End if
End if

if (rightt = "1") then
 scroll = not scroll

 ' озвучиваем
 if (speakon = true) then
  if (scroll = true) then
   Speak.Speak "Scroll Lock включен."
  End if
  if (scroll = false) then
   Speak.Speak "Scroll Lock выключен."
  End if
 End if
End if

if (leftt = "1") then
 caps = not caps

 ' озвучиваем
 if (speakon = true) then
  if (caps = true) then
   Speak.Speak "Caps Lock включен."
  End if
  if (caps = false) then
   Speak.Speak "Caps Lock выключен."
  End if
 End if
End if

res = Wrap.setgetled_keyboard(key, scroll, num, caps)
Loop ' завершение цикла
' озвучиваем
if (speakon = true) then
 Speak.Speak "Контроль над клавиатурой завершен."
End if

ПОРЯДОК ИСПОЛЬЗОВАНИЯ
  1. При задании индекса подключенных клавиатуры меньше нуля, индекс будет задан нулевым.
  2. При задании индекса подключенных клавиатуры больше количества клавиатур -1, индекс будет задан равным количеству клавиатур.
  3. Количество клавиатур может быть "любое".
забрать

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.