我正在编写一个简单的应用程序(vb.net或c#),当游戏的响度达到某个阈值时,它会单击鼠标: 我需要一个可以实时更改的数字,以显示特定应用程序的输出声音的幅度,无论是否拦截音频。我经验不足,因此无法在NAudio library中找到解决方案。
代码(“”被替换为“ //”,因此它们被彩色显示为注释而不是引号):
Public Class Form1
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Declare Function apimouse_event Lib "user32.dll" Alias "mouse_event" (ByVal dwFlags As Int32, ByVal dX As Int32, ByVal dY As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo As Int32) As Boolean
Dim shouldDetect As Boolean = True
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
registerHotkey(Me, 1, "Z", KeyModifier.Alt) //Alt + Z
End Sub
#Region "hotkey stuff"
#Region "Declarations - WinAPI, Hotkey constant and Modifier Enum"
Private Declare Function RegisterHotKey Lib "user32" _
(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Public Const WM_HOTKEY As Integer = &H312
Enum KeyModifier
None = 0
Alt = &H1
Control = &H2
Shift = &H4
Winkey = &H8
End Enum
#End Region
#Region "Hotkey registration, unregistration and handling"
Public Shared Sub registerHotkey(ByRef sourceForm As Form, keyID As Integer, ByVal triggerKey As String, ByVal modifier As KeyModifier)
RegisterHotKey(sourceForm.Handle, keyID, modifier, Asc(triggerKey.ToUpper))
End Sub
Public Shared Sub unregisterHotkeys(ByRef sourceForm As Form)
UnregisterHotKey(sourceForm.Handle, 1)
End Sub
Public Shared Sub handleHotKeyEvent(ByVal hotkeyID As IntPtr)
Select Case hotkeyID
Case 1
Form1.toggleActive()
End Select
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = WM_HOTKEY Then
handleHotKeyEvent(m.WParam)
End If
MyBase.WndProc(m)
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
unregisterHotkeys(Me)
End Sub
#End Region
#End Region
Public Sub toggleActive()
If Timer1.Enabled Then
Timer1.Stop()
Else
Timer1.Start()
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If shouldDetect Then
If loudness >= 100 Then //loudness should be controlled by live audio data
Call apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
Call apimouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Call apimouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
shouldDetect = False
waitTimer.Start() //pauses audio detection because click sequence produces loud sounds
End If
End If
End Sub
Private Sub waitTimer_Tick(sender As Object, e As EventArgs) Handles waitTimer.Tick
shouldDetect = True
waitTimer.Stop()
End Sub
End Class