[Delphi] Mapowanie Klawiatury

[Delphi] Mapowanie Klawiatury
Osadnik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 238
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"

Vogel
  • Rejestracja: dni
  • Ostatnio: dni
0

OnKeyDown, OnKeyPress

Sprawdzasz

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

Osadnik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 238
0

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

x-fly
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
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ć?

Mariusz Bruniewski
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Świecie
0

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

x-fly
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

Hook jest

Kopiuj
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 ?! :| :|

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
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.

x-fly
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

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

Kopiuj
const
  WH_JOURNALRECORD = 13; //nr hooka niskiego poziomu. Delphi nie zapewnia tej stałej
Kopiuj
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;
Kopiuj
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]

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
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.

x-fly
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 25
0

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

SZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3356
0

Myślałem, że wycinek ;)

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.