【问题标题】:c# What are these volume changing codes/messagesc#这些音量变化代码/消息是什么
【发布时间】:2015-01-01 03:29:46
【问题描述】:

我发现这个脚本可以改变系统音量,它可以工作。但是这些恒量代码叫什么,我在哪里可以找到这些代码的完整列表,这些代码可以做更多的事情。

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

//Volume codes, or messages, or whatever they are called
const int VOLUME_MUTE = 0x80000;
const int VOLUME_DOWN = 0x90000;
const int VOLUME_UP = 0xA0000;

SendMessage(this.Handle, 0x319, IntPtr.Zero, (IntPtr)VOLUME_UP);

【问题讨论】:

    标签: c# audio explorer


    【解决方案1】:

    这些是 AppCommand 消息。

    0x319是WM_APPCOMMAND的Win32 Windows MSG,更准确的消息是APPCOMMAND_VOLUME_UP等...

    AppCommand 消息是发送到窗口的消息,这些消息在全局级别进行处理并执行某些应用程序功能。这些往往与键盘热键和鼠标按钮功能相关联。

    您的应用会首先处理任何此类消息,如果您不处理它们,那么您的应用父级会处理。如果这不能处理它们,那么最终它会被发送到一个全局消息挂钩来处理它们。这里的关键是其他窗口可以捕获这些消息,因此不能保证发送这些消息就能完成任务。就像您可能已经看到,当某些窗口具有焦点时,在键盘上向上或向下按音量可能并不总是有效。

    您可以在 Win32 API 参考中找到所有消息的详细信息:

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms646275(v=vs.85).aspx

    【讨论】:

    • 你发布的链接怎么来的,APPCOMMAND_VOLUME_UP 和 APPCOMMAND_VOLUME_DOWN 与我发布的值不同。此外,每个程序都有自己的一组消息。就像 MicrosoftWord 有自己的消息一样。
    • @JackBarn - 它们不是不同的值。问题是文档是针对 Win32 API 的,它是针对 C 语言的,它在较低级别上做事。它有一个名为 GET_APPCOMMAND_LPARAM() 的宏,它从参数中检索实际值。您上面列出的值是整个参数的原始值,包括设备和键状态字段,但由于您实际上并没有发送该数据,所以它都是 0。
    • @JackBarn - 不,这些是全局窗口定义的消息。当然,程序可以定义自己的消息,但如果没有一些通用定义,只有该应用程序会知道它们。
    • 感谢您的帮助。如果你不介意。是否可以不输入原始值,而是输入更干净的东西,比如代替 0x80000,只是 8(我尝试时女巫不起作用)
    • @JackBarn - 您必须将原始值传递给 SendMessage 函数,因此无论哪种方式,您都需要该原始值。 0x8000 与 8 不同.. 不是很远.. 在程序员模式下使用 Windows 计算器并在十六进制和十进制之间切换,你会看到。
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多