vb6代码报错:Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer Private Const WM_APPCOMMAND As Integer = &H319 Private Const APPCOMMAND_VOLUME_UP As Integer = &HA Private Const APPCOMMAND_VOLUME_DOWN As Integer = &H9 Private Const APPCOMMAND_VOLUME_MUTE As Integer = &H8 Private Sub IncreaseVolume() SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_UP * &H10000) End Sub Private Sub DecreaseVolume() SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_DOWN * &H10000) End Sub Private Sub MuteVolume() SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_MUTE * &H10000) End Sub
时间: 2023-06-18 12:02:43 浏览: 351
这段代码是使用 VB6 调用 Windows API 函数来控制系统音量的,但是在 64 位 Windows 上可能会出现问题。如果你在 64 位 Windows 上运行这段代码,可能会收到“找不到指定的DLL”的错误消息。
为了解决这个问题,你需要使用 PtrSafe 关键字来声明指针类型,以及使用 LongPtr 类型来代替 Long 类型。
修改后的代码如下:
Private Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
Private Const WM_APPCOMMAND As Long = &H319
Private Const APPCOMMAND_VOLUME_UP As Long = &HA
Private Const APPCOMMAND_VOLUME_DOWN As Long = &H9
Private Const APPCOMMAND_VOLUME_MUTE As Long = &H8
Private Sub IncreaseVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_UP * &H10000
End Sub
Private Sub DecreaseVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_DOWN * &H10000
End Sub
Private Sub MuteVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_MUTE * &H10000
End Sub
注意,在使用 PtrSafe 关键字时,你需要在代码文件的开头添加 Option Explicit 和 #If Win64 Then ... #Else ... #End If 的指令。完整的代码如下:
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
#Else
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
#End If
Private Const WM_APPCOMMAND As Long = &H319
Private Const APPCOMMAND_VOLUME_UP As Long = &HA
Private Const APPCOMMAND_VOLUME_DOWN As Long = &H9
Private Const APPCOMMAND_VOLUME_MUTE As Long = &H8
Private Sub IncreaseVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_UP * &H10000
End Sub
Private Sub DecreaseVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_DOWN * &H10000
End Sub
Private Sub MuteVolume()
SendMessage Me.hWnd, WM_APPCOMMAND, &H30292, APPCOMMAND_VOLUME_MUTE * &H10000
End Sub
阅读全文
相关推荐



















