[Delphi] Mapowanie Klawiatury

0

Ehm...

Jak wykryć że wciśnięto dowolny przycisk na kalwiaturze, np "A"

Jak wykryć że został wciśnięty klawisz "end" lub inny np. "Print Screen"

0

OnKeyDown, OnKeyPress

Sprawdzasz

if Key = 'A' ... // w jednej metodzie Key: Char
if Key = VK_END // w drugiej Key: Word

0

o coś takiego mi chadzało, wreszcie na tym forum ktoś pracuje :)

0

a jak wykryć wciśnięcie dowolnego klawisza globalnie nawet wtedy gdy program jest zminimalizowany i na dalszym planie? rodzaj klawisza nie ma znaczenia, wciskam dowolny i rejestruje to zdarzenie, coś w stylu wygaszacza, wciskam klawisz i wygaszacz się wyłącza, tutaj wciskam klawisz GLOBALNIE i mogę podpiąc pod wciśnięcie dowolne zdarzenie, jak to wykonać?

0

Załóż hooka na klawiaturę.
Poszukaj w necie komponentu np keyspy dla delphi.

0

Hook jest

procedure TForm1.LockSystem;
begin
  HookID := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
end;

i jakby ktoś był łaskaw powiedzieć jak obsłużyć naciśnięcie dowolnego (a nie wybranego!) klawisza? globalnie czyli nawet gdy aplikacja jest na drugim planie nieaktywna

DOWOLNEGO GLOBALNIE

wszystkie arty mówią o konkretnym klawiszu
a mnie chodzi o przypisanie zdarzenia kiedy DOWOLNY zostanie wciśnięty

no chyba nie będę zmuszony pisać getkeystate dla kilkudziesięciu klawiszy osobno ?! :| :|

0

Przyjrzyj się działaniu HOOKa - on obsługuje dowolny klawisz. Sprawdzenia konkretnego klawisza musisz w funkcji dokonać samodzielnie, bo ona zgłasza się dla każdego zdarzenia. Pomyśl też trochę - zakładając HOOK nigdzie nie podajesz dla jakiego klawisza ma się zgłaszać, więc oczywistym jest, że zgłasza się dla dowolnego.

0

wszystko wek, jakos sobie radze, jak na razie doszedłem do czegoś takiego:

const
  WH_JOURNALRECORD = 13; //nr hooka niskiego poziomu. Delphi nie zapewnia tej stałej
function KeyHook(HookCode: Integer; KeyCode: wParam; KStrokeInfo: lParam): LResult; stdcall;
var
Struct: PKbdDllHookStruct; //Wskaźnik do struktury, w której otrzymamy informacje o stanie klawiatury
Buffer: TEventMsg; // deklaracja struktury

begin
Buffer:= PEventMsg(KStrokeInfo)^; // uzyskanie danych poprzez odczytanie wskaznika
Struct:= Ptr(KStrokeInfo);
Result:= 0;

if (Struct.ScanCode> 0) then TranslateKey(Buffer.paramL);
{.............................................}
end;
procedure TranslateKey(Key: Byte);
begin
Chr(Key)
end;

zamienia mi to wciśnięcia klawiszy na jakieś krzaczki wyglądające jak waluta Euro i to mi wystarcza, wiem że którykolwiek z klawiszy został wciśnięty :>
gdyby ktoś potrzebował rozwiązanie problemu to podam

powiedzcie mi gdzie moge zamieścic do ogólnego użytku moje cacko które napisałem? [soczek]

0

Nie ma takiej potrzeby - gdybyś zajrzał do działu FAQ zobaczyłbyś, że to już tam jest. Z resztą w Rozdziale 5 Kompendium również o tym znajdziesz.

0

chodzi mi o progs ktory napisalem nie wycinek kodu ;-)
no wiec gdzie moge go zamieścić ?

0

Myślałem, że wycinek ;)

Jeśli myślisz, że komuś może się przydać, to daj do działu Delphi/Gotowce.

1 użytkowników online, w tym zalogowanych: 0, gości: 1