Первая причина, по которой это не работает, заключается в том, что вы используете неправильную 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 ().Фактический дескриптор окна не имеет значения, если он является допустимым для верхнего уровня.