Wiem że tego na forum jest pełno, przeczytałem prawie wszystkie tematy odnośnie przechwytywania klawiszy, odczytu itp, ale nic niestety mi nie pomogło.
Korzystałem już z:
GetAsyncKeyState();
użytym w timerze ale czasem klawisz odczyta, czasem nie.
Oraz z:
procedure TFormMain.FormCreate(Sender: TObject);
begin
// Hook Keyboard
RegisterHotKey(Handle,$0001,0,VK_SNAPSHOT);
RegisterHotKey(Handle,$0002,0,VK_VOLUME_UP);
RegisterHotKey(Handle,$0003,0,VK_VOLUME_DOWN);
end;
procedure TFormMain.LockKeyPress(var Msg: TMessage);
begin
if Msg.wParam=$0001 then begin
showmessage('printscreen');
end;
if Msg.wParam=$0002 then begin
showmessage('volume+');
end;
if Msg.wParam=$0003 then begin
showmessage('volume-');
end;
end;
gdzie klawisze po prostu zostały mi odebrane z działania w innych programach na rzecz tego jednego.
Moim problemem jest użycie klawisza PrintScreen oraz na raz klawiszy Vol+ i Vol- gdyż chcę stworzyć uniwersalny program do robienia zrzutów ekranu. Klawisze Vol+ i Vol- dlatego, gdyż kupiłem sobie tablet z Windows 8.1 i niestety takiej funkcji robienia zrzutu tam nie ma jak w Androidzie czy Windows Phone, a podłączanie zewnętrznej klawiatury wymaga trochę nakładu pracy. Naciśnięcie klawiszy Vol+ i Vol- jednocześnie byłoby dobrym rozwiązaniem, mógłbym użyć też przycisku ACPI ale z nim pewnie by było więcej problemów.