Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用win32 waveOutSetVolume函数设置目标进程的卷?_C#_Vb.net_Winapi_Audio_Pinvoke - Fatal编程技术网

C# 是否使用win32 waveOutSetVolume函数设置目标进程的卷?

C# 是否使用win32 waveOutSetVolume函数设置目标进程的卷?,c#,vb.net,winapi,audio,pinvoke,C#,Vb.net,Winapi,Audio,Pinvoke,我想设置正在播放音频的指定进程的音量 我发现我可以用waveOutSetVolumeWinAPI函数来实现它,因为它是按照流程工作的,但是,在阅读了下面的文档之后,我仍然不知道如何实现它 我正在C#或VB.Net中寻找解决方案 这是我的waveOutSetVolume公司: <DllImport("winmm.dll", EntryPoint:="waveOutSetVolume", SetLastError:=True)> Friend Shared Function Wa

我想设置正在播放音频的指定进程的音量

我发现我可以用
waveOutSetVolume
WinAPI函数来实现它,因为它是按照流程工作的,但是,在阅读了下面的文档之后,我仍然不知道如何实现它

我正在C#或VB.Net中寻找解决方案

这是我的waveOutSetVolume公司:

<DllImport("winmm.dll", EntryPoint:="waveOutSetVolume", SetLastError:=True)>
Friend Shared Function WaveOutSetVolume(byval hwo As IntPtr, 
                                        byval dwVolume As UInteger) As Integer
End Function

朋友共享功能WaveOutSetVolume(byval hwo作为IntPtr,
byval dwVolume(作为UInteger)作为整数
端函数
这就是我试图调用函数的方式:

Public Sub SetVolume(ByVal hwo As IntPtr, ByVal volume As Integer)

    If (volume < 0) OrElse (volume > 100) Then
        Throw New ArgumentOutOfRangeException(
                  paramName:="volume", 
                  message:="A value between 0 and 100 is required.")

    Else
       Dim valueFromPercent As UShort = CUShort(volume / (100US / UShort.MaxValue))

       ' Left channel volume
        Dim loBytes As Byte() = BitConverter.GetBytes(valueFromPercent)

       ' Right channel volume
        Dim hiBytes As Byte() = BitConverter.GetBytes(valueFromPercent)

        Dim dWord As UInteger = 
            BitConverter.ToUInt32(loBytes.Concat(hiBytes).ToArray, 0)

        NativeMethods.WaveOutSetVolume(hwo, dWord)

    End If

End Sub
Public Sub-SetVolume(ByVal hwo作为IntPtr,ByVal volume作为整数)
如果(体积<0)或(体积>100),则
抛出新ArgumentOutOfRangeException(
paramName:=“卷”,
消息:=“需要一个介于0和100之间的值。”)
其他的
Dim VALUES FROMPERCENT As UShort=CUShort(体积/(100US/UShort.MaxValue))
'左声道音量
Dim loBytes As Byte()=位转换器.GetBytes(valueFromPercent)
'右通道音量
将hiBytes设置为Byte()=位转换器.GetBytes(valueFromPercent)
作为UInteger的尺寸dWord=
位转换器.ToUInt32(loBytes.Concat(hiBytes.ToArray,0)
NativeMethods.WaveOutSetVolume(hwo,dWord)
如果结束
端接头
我知道hwo与进程句柄不同,但正如我所说的,我不知道如何发现进程的hwo


注意:我的DWORD计算似乎不是问题,因为如果我将
Intptr.Zero
传递给函数,那么它将设置当前应用程序的预期音量。

传递给幻影下选器,您想解释一下为什么这样的问题值得投反对票吗?。很可能您必须在您的过程中创建一个问题,例如使用(可能涉及其他额外任务),或枚举可用的兼容设备,并传递设备ID。@CristiFati感谢您的评论,但请注意,我可以在不使用waveOutOpen等附加功能的情况下设置调用方应用程序的音量,或者我可能理解错误,您的意思是从我的应用程序中使用该功能打开/访问其他应用程序的波形。否决票可能是因为您尝试执行的操作不可能,这就像更改Windows从外部进程渲染进程内部按钮的方式一样。您可以在自己的应用程序中执行类似操作,您可以修改两个应用程序,以便它们进行通信,然后让第二个进程修改自己的卷,但这是您所能达到的最佳效果。您是对的,我误解了这个问题。我不知道有什么方法可以从指定的流程中获取hwo(但我认为这是该流程的内部内容,即使您这样做了,您也无法使用它)。我正在设想一种解决方法,创建一个hwo,获取与之相关联的设备id,并在该设备上操作,以及(我在此仅假设)链接到设备id的所有hwo。到幻影下载器,您想解释一下为什么这样的问题值得投反对票吗?。很可能您必须在您的过程中创建一个问题,例如使用(可能涉及其他额外任务),或枚举可用的兼容设备,并传递设备ID。@CristiFati感谢您的评论,但请注意,我可以在不使用waveOutOpen等附加功能的情况下设置调用方应用程序的音量,或者我可能理解错误,您的意思是从我的应用程序中使用该功能打开/访问其他应用程序的波形。否决票可能是因为您尝试执行的操作不可能,这就像更改Windows从外部进程渲染进程内部按钮的方式一样。您可以在自己的应用程序中执行类似操作,您可以修改两个应用程序,以便它们进行通信,然后让第二个进程修改自己的卷,但这是您所能达到的最佳效果。您是对的,我误解了这个问题。我不知道有什么方法可以从指定的流程中获取hwo(但我认为这是该流程的内部内容,即使您这样做了,您也无法使用它)。我正在设想一种解决方法,创建一个硬件操作系统,获取与之相关联的设备id,并在该设备上操作,以及(我在此仅假设)链接到该设备id的所有硬件操作系统。