gpt4 book ai didi

C#模拟音量静音按下

转载 作者:太空狗 更新时间:2023-10-29 23:03:27 27 4
gpt4 key购买 nike

我得到以下代码来模拟音量静音按键:

    [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_event 由 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()。实际的窗口句柄并不重要,只要它是有效的顶层句柄即可。

关于C#模拟音量静音按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4774768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com