delphi - Delphi中模拟多媒体按键

标签 delphi key multimedia simulate scancodes

我需要在Delphi中模拟按下多媒体按键(例如播放/暂停、上一曲/下一曲、快退/快进等)。 我可以使用下面的代码轻松模拟“正常”键:

keybd_event(VK_SPACE,0, 0, 0);
keybd_event(VK_SPACE,0, KEYEVENTF_KEYUP, 0);

此外,我还找到了 MAKE/BREAK 代码列表,但我应该如何处理它们?

MSDN 说:

VOID keybd_event(
    BYTE bVk,   // virtual-key code
    BYTE bScan, // hardware scan code
    DWORD dwFlags,  // flags specifying various function options
    DWORD dwExtraInfo   // additional data associated with keystroke
   );   
bVk - Specifies a virtual-key code. The code must be a value in the range 1 to 254. 
bScan - Specifies a hardware scan code for the key. 
dwFlags - A set of flag bits that specify various aspects of function operation.
    An application can use any combination of the following predefined constant
    values to set the flags: 
    KEYEVENTF_EXTENDEDKEY - If specified, the scan code was preceded by a 
        prefix byte having the value 0xE0 (224).
    KEYEVENTF_KEYUP If specified, the key is being released. If 
        not specified, the key is being depressed.
dwExtraInfo - Specifies an additional 32-bit value associated with the key stroke. 

我找到了音量调高的扫描码:

Make Code: E0, 32 Break Code: E0, F0, 32

我尝试过:

keybd_event(0,$32, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(0,$32, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);

但也没有运气(这必须模拟 E0 32 E0 32,没有 F0)。另外,MSDN 说 bVk 必须是 [1..254],我使用 0,因为我在 key 代码列表中没有找到任何合适的内容。

最佳答案

它在 Delphi XE3 中对我有用:

keybd_event(VK_VOLUME_UP {$AF},0, 0, 0);
keybd_event(VK_VOLUME_UP,0, KEYEVENTF_KEYUP, 0);

如果您的 Delphi 版本中未声明这些常量,请查看 the table here

关于delphi - Delphi中模拟多媒体按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23215462/

相关文章:

delphi - 在delphi中从数组数据播放声音的最简单方法是什么

qt - 如何在桌面应用程序上使用 QtMultimedia?

delphi - 在 Firemonkey 中获取应用程序路径

android - facebook native android 应用程序不接受我的 key 哈希

JavaScript |遍历 JSON 对象并获取特定键的所有值

sockets - amr音频文件字节可以包含 `#`字符吗?

delphi - 我可以使用比我学校使用的更新版本的 Delphi 来完成我的类(class)吗?

c++ - Delphi 和 C++ 类 VMT 兼容吗?

delphi - 可以安全地假设 InternetCloseHandle() 不会失败,从而允许更清晰的代码吗?

c# - 在注册表中创建一个键并使用 installshield 使用安装路径设置它的值