Mar*_*cus 0 c# explorer message-queue sendmessage
我正在尝试使用标准SendMessageW() 方法从控制台应用程序取消静音.但是,我们有自己的应用程序作为shell运行,而不是explorer.exe.当我试图取消静音时,没有任何反应; 但是一旦我启动资源管理器它就可以了.是否必须运行资源管理器才能发送消息?
码:
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int WM_APPCOMMAND = 0x319;
SendMessageW(Process.GetCurrentProcess().MainWindowHandle, WM_APPCOMMAND, Process.GetCurrentProcess().MainWindowHandle, (IntPtr)APPCOMMAND_VOLUME_MUTE);
Run Code Online (Sandbox Code Playgroud)
返回值为SendMessageW()0.
如果需要资源管理器,是否有人知道另一种取消静音方法?
Side Note
我刚刚尝试使用vbs:
Set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys(chr(&hAD))
Run Code Online (Sandbox Code Playgroud)
并得到了相同的结果.只有在explorer.exe运行时才取消静音.
SendMessageW是User32.DLL中的一个函数,它的作用是向应用程序发送一条消息,告诉它执行某些操作.在这种情况下,您正在向Explorer发送消息并告诉它将声音静音.SendMessageW无论资源管理器是否正在运行,都会发送此消息,但是,如果您正在运行自己的shell,则您的shell不会被编程为知道如何处理此消息并且忽略它.
你可以做两件事之一.第一个是APPCOMMAND_VOLUME_MUTE在shell中实现,以便在发送消息时,它可以使声音静音.第二个是使用WinMM.dll文件静音,并使用此处发布的代码来静音(这是explorer.exe在收到静音命令后执行的操作).