Помогите люди, я уже не могу биться над этой задачей. Суть такова, с помощью хука отлавливаю нажатия клавиш (интересует только английские буквы и цифры). Так вот вроде все работает только вот выводится все в однов регистре в верхнем. нужно чтобы если вводится нижний писать нижний, если верхний тогда писать заглавные.
вот мой код
Код
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PKbdDllHookStrukt = ^TKbdDllHookStrukt;
_KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: PDWORD;
end;
TKbdDllHookStrukt = _KBDLLHOOKSTRUCT;
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
begin
StrResult := Chr(PKbdDllHookStrukt(LParam)^.vkCode);
Form1.Memo1.Lines.Add(StrResult);
end;
end;
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.