![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Есть программа консольная, так сказать записывает нажатия клавиш. Проблема в том что все символы не зависимо от того как были введены, заглавные или нет пишутся как заглавные (верхнего региста). Как отличить и сделать чтобы выводились так как они вводятся.
Код:
procedure LoggingKey; var X:integer; begin for X:=65 to 90 do begin if GetAsyncKeyState(X)=-32767 then Write(Chr(X)); end; end; var mesg:tmsg; begin SetTimer(0, 0, 1, @LoggingKey); While GetMessage(Mesg,0,0,0) do begin TranslateMessage(Mesg); DispatchMessage(Mesg); end; end. P.S. Или если возможно предложить другие вариант, отловить нажатия. Отлавливаю лишь буквы англ. и цифры. Заморочки с раскладкой других языков не интересует. Главное чтобы регистр был правильный и без dll. Последний раз редактировалось Anton93, 23.05.2015 в 00:58. |
#2
|
||||
|
||||
![]() Так у вас идёт отлов клавиш от A до Z ($41..$63). a..z = $61..$7A.
То есть: Код:
for X:=65 to 122 do begin if X in [65..90, 97..122] then if GetAsyncKeyState(X)=-32767 then Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 23.05.2015 в 01:13. |
#3
|
|||
|
|||
![]() Откопал такой код, методом хука. но проблема осталась та же.
Код:
type PKbdDllHookStrukt = ^TKbdDllHookStrukt; _KBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: PDWORD; end; TKbdDllHookStrukt = _KBDLLHOOKSTRUCT; const RPT_WPARAM_DATA = 'Keyboard message = %s '; RPT_LPARAM_DATA = 'scan code = %s [%d]'; var StrResult: String; var Form1: TForm1; hHook: THandle; implementation {$R *.dfm} function LowLevelKeyboardProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT stdcall; begin StrResult := ''; if nCode = HC_ACTION then Result := CallNextHookEx(hHook, nCode, WParam, LParam); case WParam of WM_KEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['WM_KEYDOWN']); WM_KEYUP: StrResult := Format(RPT_WPARAM_DATA, ['WM_KEYUP']); WM_SYSKEYDOWN: StrResult := Format(RPT_WPARAM_DATA, ['WM_SYSKEYDOWN']); WM_SYSKEYUP: StrResult := Format(RPT_WPARAM_DATA, ['WM_SYSKEYUP']); end; StrResult := StrResult + Format(RPT_LPARAM_DATA, [Chr(PKbdDllHookStrukt(LParam)^.vkCode), PKbdDllHookStrukt(LParam)^.vkCode]); Form1.Memo1.Lines.Add(StrResult); end; procedure TForm1.FormCreate(Sender: TObject); const WH_KEYBOARD_LL = 13; begin hHook := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0); if hHook = 0 then RaiseLastOSError; end; end. Последний раз редактировалось Anton93, 23.05.2015 в 20:16. |