Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Эмуляция нажатия lock-ов
Посл.ответ Сообщение

Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 13 марта 2008 22:48
· Личное сообщение · #1

имеется процедура на delphi для эмуляции нажати scrolllock, numlock , сcapslock
Проблема в том что скрольлок и капслок эмулируются а намлок нет. Кто нибудь обясните пожайлуста почему так происходит.

procedure SetLedState(KeyCode:integer; bOn: Boolean);
var
KBState: TKeyboardState;
Code: Byte;
begin
case KeyCode of
1: Code := VK_SCROLL;
2: Code := VK_CAPITAL;
3: Code := VK_NUMLOCK;
end;
GetKeyboardState(KBState);
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
begin
if Boolean(KBState[Code]) <> bOn then
begin
keybd_event(Code,
MapVirtualKey(Code, 0),
KEYEVENTF_EXTENDEDKEY,
0);

keybd_event(Code,
MapVirtualKey(Code, 0),
KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,
0);
end;
end
else
begin
KBState[Code] := Ord(bOn);
SetKeyboardState(KBState);
end;
end;

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 13 марта 2008 23:03
· Личное сообщение · #2

Попробуй вот такой код

procedure SetNumLock(bState:Boolean);
var
KeyState : TKeyboardState;
begin
GetKeyboardState(KeyState);
if ((bState)and(not((KeyState[VK_NUMLOCK]and 1)=1))or
((not(bState))and((KeyState[VK_NUMLOCK]and 1)=1))) then
// Simulate a key press
keybd_event(VK_NUMLOCK,$45,(KEYEVENTF_EXTENDEDKEY or 0),0);
// Simulate a key release
keybd_event(VK_NUMLOCK,$45,(KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP),0);
end;



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 13 марта 2008 23:10
· Личное сообщение · #3

Ладно тема уже не актуальна
Закрыл
ps:tihiy_grom твой пример как и мой не пашет

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74



 eXeL@B —› Программирование —› Эмуляция нажатия lock-ов
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати