键盘上的特殊键

时间:2011-08-24 20:39:10

标签: c# .net input keyboard sendkeys

我的程序是否能够“触发”键盘上的特殊键,例如媒体键(播放,暂停,下一个等等)。我正在尝试创建一个执行这些功能的应用程序,一种简单的方法是模拟按下的那些键。如果它更容易,这是一个个人项目,所以我不介意解决方案是非通用的和/或不适用于所有键盘。我环顾四周,我认为SendKey可能是一种方法,但我不知道这些特殊键的扫描码是什么。

1 个答案:

答案 0 :(得分:9)

以下链接提供了在应用程序中使用多媒体键盘键的好主意,但本文适用于c ++,您必须自己了解如何使用这些功能。

编辑: 基于这些文章,我实现了一些媒体功能键,可以让你控制应用程序的音量。

    private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    private const int APPCOMMAND_VOLUME_UP = 0xA0000;
    private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
    private const int WM_APPCOMMAND = 0x319;
    private const int APPCOMMAND_MEDIA_PLAY_PAUSE = 0xE0000;


    [DllImport("user32.dll")]
    public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg,
        IntPtr wParam, IntPtr lParam);

    public Form1()
    {
        InitializeComponent();
    }

    private void btnPlayPause_Click(object sender, EventArgs e)
    {
        SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
            (IntPtr)APPCOMMAND_MEDIA_PLAY_PAUSE);
    }

    private void btnMute_Click(object sender, EventArgs e)
    {
        SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
            (IntPtr)APPCOMMAND_VOLUME_MUTE);
    }

    private void btnDecVol_Click(object sender, EventArgs e)
    {
        SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
            (IntPtr)APPCOMMAND_VOLUME_DOWN);
    }

    private void btnIncVol_Click(object sender, EventArgs e)
    {
        SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
            (IntPtr)APPCOMMAND_VOLUME_UP);
    }

只需复制并随意使用。

Low-Level Keyboard Hook in C#

Using Multimedia Keyboard Keys in Your Own Program