我正在基于运行 Win7 的旧计算机构建多媒体控制台。
我想用数字键盘控制玩家。
我无法使用常见的媒体控制设备,因为它们仅响应 Windows 媒体播放器。我会使用 KVM Player、Winamp 等。因此,每个人都有自己的一组键盘快捷键,用于播放、暂停、前进、音量等。
为此,我正在考虑构建一个 Delphi 应用程序来检测前台应用程序并从数据库获取该应用程序使用的快捷方式。
当我使用数字键盘(常规遥控器的大小)并按5
对于播放,我的应用程序可以检测到它并将其发送到操作系统P
如果我使用 Winamp 或Space
如果我使用的是经典媒体播放器。
我应该使用什么函数来首先获取按下的键,然后发送不同的键?
部分解决方案可以使用键盘挂钩(WH_KEYBOARD_LL) 捕获特殊组合键或单个键,然后使用按键事件发送(替换)另一个击键的函数。
Try this sample code which intercepts the VK_UP
key and send a S
var
hhk: HHOOK;
function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
type
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTRUCT;
TKBDLLHOOKSTRUCT = record
vkCode: cardinal;
scanCode: cardinal;
flags: cardinal;
time: cardinal;
dwExtraInfo: Cardinal;
end;
PKeyboardLowLevelHookStruct = ^TKeyboardLowLevelHookStruct;
TKeyboardLowLevelHookStruct = TKBDLLHOOKSTRUCT;
var
LKBDLLHOOKSTRUCT: PKeyboardLowLevelHookStruct;
begin
case nCode of
HC_ACTION:
begin
LKBDLLHOOKSTRUCT := PKeyboardLowLevelHookStruct(lParam);
if (LKBDLLHOOKSTRUCT^.vkCode = VK_UP) then
begin
if (wParam=WM_KEYUP) or (wParam=WM_SYSKEYUP)then
keybd_event( Ord('S'), 0, KEYEVENTF_KEYUP, 0)
else
keybd_event( Ord('S'), 0, 0, 0);
Exit(1); //eat the key
end;
end;
end;
Result := CallNextHookEx(hhk, nCode, wParam, lParam);
end;
Procedure InitHook();
begin
hhk := SetWindowsHookEx(WH_KEYBOARD_LL, @CBT_FUNC, 0, 0);
if hhk=0 then RaiseLastOSError;
end;
Procedure KillHook();
begin
if (hhk <> 0) then
UnhookWindowsHookEx(hhk);
end;
initialization
InitHook();
finalization
KillHook();
end.
在使用这种钩子之前,请记住阅读文档,特别是remarks部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)