Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#模拟容积式压力机_C#_.net_Keypress_Simulate_Mute - Fatal编程技术网

C#模拟容积式压力机

C#模拟容积式压力机,c#,.net,keypress,simulate,mute,C#,.net,Keypress,Simulate,Mute,我得到了以下代码来模拟volumemute按键: [DllImport("coredll.dll", SetLastError = true)] static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); byte VK_VOLUME_MUTE = 0xAD; const int KEYEVENTF_KEYUP = 0x2; const int K

我得到了以下代码来模拟volumemute按键:

    [DllImport("coredll.dll", SetLastError = true)]
    static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

    byte VK_VOLUME_MUTE = 0xAD;
    const int KEYEVENTF_KEYUP = 0x2;
    const int KEYEVENTF_KEYDOWN = 0x0;
    private void button1_Click(object sender, EventArgs e)
    {
            keybd_event(VK_VOLUME_MUTE, 0, KEYEVENTF_KEYDOWN, 0);
            keybd_event(VK_VOLUME_MUTE, 0, KEYEVENTF_KEYUP, 0);
    }
这个代码不起作用。我知道SendMessageW有另一种静音/取消静音的方法,但我不想使用SendMessageW,因为我使用KeyState来检测我是需要静音还是取消静音(如果用户想要取消静音并且已经取消静音,那么我不需要切换-这就是为什么我需要模拟VolumeMute按键)


谢谢。

它不起作用的第一个原因是因为您使用了错误的DLL,coredll.DLL是Windows Mobile。在Windows的桌面版本中,keybd_事件由user32.dll导出。它不起作用的第二个原因是发送击键不够好。不太清楚为什么,这似乎是在通用输入处理程序之前被拦截的

您可以使用WM_APPCOMMAND,它支持一系列命令,APPCOMMAND_VOLUME_MUTE就是其中之一。它充当开关,打开和关闭静音。使您的代码如下所示:

    private void button1_Click(object sender, EventArgs e) {
        var msg = new Message();
        msg.HWnd = this.Handle;
        msg.Msg = 0x319;              // WM_APPCOMMAND
        msg.WParam = this.Handle;
        msg.LParam = (IntPtr)0x80000; // APPCOMMAND_VOLUME_MUTE
        this.DefWndProc(ref msg);
    }

此代码需要位于表单的实例方法中,请注意它如何使用DefWndProc()。如果要将其放在其他位置,则需要回退到SendMessage()。实际的窗口句柄并不重要,只要它是一个有效的顶级句柄。

当你说它不工作时,你会从你的p-invoke中得到一个异常吗?没有错误。它只是没有使声音静音。@fardjad Windows 7 Ultimate 32位你给我的功能没有模拟按键。它会使声音静音,但不会在按键时模拟声音。不过,您的回答很有用,我将coredll.dll改为user32.dll并使用了我的函数-它起作用了。谢谢。呃,它可以使声音静音。这不是重点吗?您可能想在我的机器上考虑,发送击键不起作用。其他人也注意到了这个问题,在MSDN论坛上有几个问题。我发布的代码运行良好。正如我前面提到的,它确实有效。但我的观点是:我有两个按钮,一个用于静音,一个用于取消静音——让我们假设当前的声音状态是静音的。我想取消静音的声音,但与你的解决方案,无论我将按下哪个按钮-他们都做相同的。。。所以基本上我需要的是得到主卷的状态。。。。