внутри моего hook proc, как определить, используется ли нажатие клавиши SHIFT (не отпуская ее), а затем клавишу char (например, A)?Определите, нажата ли кнопка SHIFT на клавиатуре insde Hook Proc
, например, если я нажимаю Shift + A, я хочу знать, что это будет прописным вместо того, чтобы его, как Shift,
так будут, если пользователь нажимает и отпускает Сдвиг , он будет захватывать только Shift.
instaleld крючок WH_KEYBOARD (Global)
function KeyHookProc(Code: Integer; wVirtKey: WPARAM; lKeyStroke: LPARAM)
: LRESULT; stdcall;
type
TTransitionState = (tsPressed, tsReleased);
PKeystrokeData = ^TKeystrokeData;
TKeystrokeData = record
VirtualKey: WPARAM;
KeyStroke: LPARAM;
KeyState: TKeyboardState;
end;
var
Transition: TTransitionState;
KeystrokeDataPtr: PKeystrokeData;
begin
Result := CallNextHookEx(hKeyHook, Code, wVirtKey, lKeyStroke);
Transition := TTransitionState((lKeyStroke shr 31) and 1);
if (Code = HC_ACTION) and (Transition = tsPressed) then
begin
New(KeystrokeDataPtr);
try
KeystrokeDataPtr^.VirtualKey := wVirtKey;
KeystrokeDataPtr^.KeyStroke := lKeyStroke;
GetKeyboardState(KeystrokeDataPtr^.KeyState);
SendMessage(hConsole, WM_NULL, 0, LPARAM(KeystrokeDataPtr));
finally
Dispose(KeystrokeDataPtr);
end;
end;
end;
Этот класс должен предоставить необходимую информацию. http://wwww.bummisoft.de/download/Key_Hook_Class.zip – bummi
Кстати, не глобальные крючки suppouse для внутри .dll? из моего воспоминания LowLevel один не должен быть внутри .dll, хотя, я прав? – 2013-05-05 17:54:34
@ user1803300 Это правильно. –