在 Windows 7 上更改程序音量

2024-01-31

我想改变程序的音量(而不是master体积)。我现在有以下代码:

DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

private void volumeBar_Scroll(object sender, EventArgs e)
{
    // Calculate the volume that's being set
    int NewVolume = ((ushort.MaxValue / 10) * volumeBar.Value);
    // Set the same volume for both the left and the right channels
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    // Set the volume
    waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}

这只适用于 Win XP,不适用于 Windows 7(可能也适用于 Vista)。我还没有找到任何脚本可以在 Win 7 上实现相同的效果,只是更改主卷(我不这样做)。


你的代码对我来说工作正常(经过一些调整)。以下是在 Windows 7 x64 上运行的非常简单的 WPF 测试应用程序的代码:

Xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Slider Minimum="0" Maximum="10" ValueChanged="ValueChanged"/>
    </Grid>
</Window>

C#

public partial class MainWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        // Calculate the volume that's being set
        double newVolume = ushort.MaxValue * e.NewValue / 10.0;

        uint v = ((uint) newVolume) & 0xffff;
        uint vAll = v | (v << 16);

        // Set the volume
        int retVal = NativeMethods.WaveOutSetVolume(IntPtr.Zero, vAll);

        Debug.WriteLine(retVal);

        bool playRetVal = NativeMethods.PlaySound("tada.wav", IntPtr.Zero, 0x2001);

        Debug.WriteLine(playRetVal);
    }
}

static class NativeMethods
{
    [DllImport("winmm.dll", EntryPoint = "waveOutSetVolume")]
    public static extern int WaveOutSetVolume(IntPtr hwo, uint dwVolume);

    [DllImport("winmm.dll", SetLastError = true)]
    public static extern bool PlaySound(string pszSound, IntPtr hmod, uint fdwSound);
}

当我启动应用程序并移动滑块时,“音量混合器”中会出现一个附加音量控件,它与滑块同步从最小移动到最大。

您应该检查 waveOutSetVolume 的返回值。如果您的代码仍然无法工作,它可能会为您提供线索。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows 7 上更改程序音量 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 编写此代码片段的有效方法是什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 更有效和 或更短地重写此代码以节省字节并显得不那么冗长的方法 if N 2 0 N 6 N 8 N 10 N 12 N 14 N 16 N
  • WebClient.DownloadDataAsync 冻结了我的 UI

    我在 Form 构造函数中的 InitializeComponent 之后有以下代码 using WebClient client new WebClient client DownloadDataCompleted new Downloa
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 在 C++11 中移出 stdpriority_queue 的元素

    最小的工作示例 include
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • 用于连接 DataTable 上的动态列的动态 LINQ

    我目前遇到的情况不确定如何继续 我有两个从数据库填充的数据表 我还有一个可用的列名称列表 可用于将这两个数据表连接在一起 我希望编写一组 LINQ 查询 这些查询将 显示两个数据表中的行 内部联接 用于从一个数据表更新另一个数据表 显示一个
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • Autoconf 问题:“错误:C 编译器无法创建可执行文件”

    我正在尝试使用 GNU 自动工具构建一个用 C 编写的程序 但显然我设置错误 因为当configure运行 它吐出 configure error C compiler cannot create executables 如果我看进去con
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 无法识别解决方案文件夹中的 Visual Studio 2017 Nuget.config

    我在使用 Visual Studio 2017 时遇到问题 新的解决方案不断引用 C Users yopa AppData Roaming NuGet Nuget config 中意外位置的 Nuget config 文件 我已将 nuge
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section

随机推荐

  • 当手动将进度设置为 MotionLayout 时,它会清除所有约束

    我有带有两个小部件的 MotionLayout 一个在 MotionLayout 中描述 第二个在场景文件中描述 布局文件
  • 如何获取用户控件数据类型所在的TabPage

    我正在使用用户控件包装器方法构建自定义数据类型 我在其中添加现有的 TinyMCE 数据类型 问题是我需要找到一种方法来动态获取数据类型所在的当前 TabPage 以便我可以将 TinyMCE 按钮添加到菜单中 这就是我目前所拥有的 Tab
  • 使用 Ajax 和 PHP $_FILES 从 Canvas 元素发送图像

    我需要能够将图像和一些表单字段从客户端画布元素发送到 PHP 脚本 最终以 POST 和 FILES 结束 当我这样发送时
  • 将 Haskell 线程与内核线程进行比较 - 我的基准测试可行吗?

    这实际上是我的大学项目 在我的文章中 我需要提供证据证明 Haskell 线程的创建速度比普通内核线程更快 我知道最好参考一些研究论文 但重点是我必须自己进行基准测试 这是我的想法 我用 C 使用 pthreads 和 Haskell 编写
  • 错误“HttpServletRequest 引用了缺失的 String 类型”

    我正在 struts 中实现一个项目 其中 JSP 页面出现错误 我已经在 Eclipse IDE 中配置了 Tomcat 6 JRE 和 JDK 6 代码是 request getContextPath 错误是 The method ge
  • PHP 依赖注入

    我正在尝试了解依赖注入 并且在很大程度上我理解它 然而 如果由于某种原因 我的一个类依赖于多个类 而不是将所有这些都传递给构造函数中的这个类 是否有更好 更明智的方法 我听说过 DI 容器 这是我解决这个问题的方法吗 我应该从哪里开始使用这
  • 使用 PHPExcel 读取包含合并单元格的 Excel 工作表

    我想完整地阅读 Excel 工作表并使用 AJAX 将每一行发送到另一个页面进行处理 因此 我使用以下代码将 Excel 工作表数据转换为 JSON 数组 参考库中提供的 PHPExcel 示例
  • 如何使一个方法可用于 Rails 中的控制器和模型?

    我的 Rails 应用程序中有一个私有方法来连接到 Amazon S3 执行传递的代码块 然后关闭与 S3 的连接 看起来是这样 def S3 AWS S3 Base establish connection access key id g
  • Tomcat 中 System.setProperty 的范围

    这个问题是 表弟 这个涉及Android https stackoverflow com questions 4483001 scope of system setproperty 但我们在这里Tomcat环境 如果在我的网络应用程序中我设
  • Asp.net core 2 - 文件未发布

    EDIT 有关信息 我正在 macOS 上使用 VS Code 进行开发 我正在尝试将文件包含在我的发布过程中 当前cshtml这代表我的电子邮件模板 我遵循这个thread https github com dotnet sdk issu
  • 为什么 Spring Boot Batch 作业只运行一次?

    我正在使用弹簧靴 我有一个用这些类实现的批处理作业 我的主要课程是 SpringBootApplication ComponentScan com batch PropertySource classpath application pro
  • C++模板:全局对象中的静态成员未初始化

    我有一段简单的 C 代码 其中我通过专门化模板定义了一个模板和一个全局对象 对象构造函数访问专用模板中的静态成员 但事实证明静态成员此时尚未初始化 但对于本地对象 在函数体内定义 它是有效的 我很困惑 我的c 编译器是 g Ubuntu 5
  • 禁用java中的其他声音

    我用 Java 编写了一个程序 使用 pi4j 库在单击 物理 按钮时发出声音 该程序可以工作 但现在它可以互换地播放所有声音 我希望当您单击 2 3 4 或更多按钮时 您只能听到一种声音 这是我希望对您有所帮助的代码 public cla
  • Eclipse 部署程序集 - 在主项目 WEB-INF/lib 内创建依赖项目的 .war?

    我有一个主要的 Web 项目 其中包含部署和通过浏览器访问页面所需的所有内容 然后我有几个 功能 每个功能都是一个单独的项目 可以包含在主项目中 举个例子 我有MainApp and 函数 reportsApp 当构建这些时ant发生以下情
  • 为什么网络浏览器没有内置 jQuery? [复制]

    这个问题在这里已经有答案了 对我来说这似乎是个好主意 或者向 Javascript 本身添加附加功能 因为它只是众多图书馆之一 它可能很受欢迎 但它远不是唯一的选择 它还会导致它冻结在特定版本上并使改进速度慢得多 另外 无论如何也没有什么优
  • org.apache.commons.fileupload.disk.DiskFileItem 未正确创建?

    我正在尝试使用以下示例中显示的代码 创建 DiskFileItem 时出现 java lang NullPointerException https stackoverflow com questions 4120635 java lang
  • 在 bootstrap daterangepicker 中默认选择“本月”范围

    我正在使用 Bootstrap Daterange Picker 它使用以下范围选项 ranges Today moment moment Yesterday moment subtract 1 days moment subtract 1
  • 如何使用 perl 比较日期?

    我如何使用 Perl 比较以下格式的两个日期 dd mon yyyy hh mm ss GMT 例如 2013 年 5 月 12 日 10 10 20 GMT 我无法安装任何外部 Perl 模块 请指教 如果您有 Perl v5 9 5 或
  • 如何使 StackPanel 或 DockPanel 拉伸以适合 WPF 中的容器?

    我有一个Grid作为定义了两列的根容器 只有一行 第一列具有灵活宽度 第二列具有 300px 固定宽度 接下来 我放置了一个ListBox在第二列内部进行水平和垂直拉伸 即填充整个第二列 最后 我定义了一个项目模板ListBox是一个垂直方
  • 在 Windows 7 上更改程序音量

    我想改变程序的音量 而不是master体积 我现在有以下代码 DllImport winmm dll public static extern int waveOutGetVolume IntPtr hwo out uint dwVolum