go-wca/pkg/wca/IAudioSessionControl_windows.go
Yoshiyuki Koyanagi 53a62d71d2 Apply go fmt
2023-03-04 15:43:43 +09:00

156 lines
3.4 KiB
Go

//go:build windows
// +build windows
package wca
import (
"syscall"
"unsafe"
"github.com/go-ole/go-ole"
)
func ascGetState(asc *IAudioSessionControl, retVal *uint32) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().GetState,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(retVal)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascGetDisplayName(asc *IAudioSessionControl, retVal *string) (err error) {
var retValPtr uint64
hr, _, _ := syscall.Syscall(
asc.VTable().GetDisplayName,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(&retValPtr)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
var us []uint16
var i uint32
var start = unsafe.Pointer(uintptr(retValPtr))
for {
u := *(*uint16)(unsafe.Pointer(uintptr(start) + 2*uintptr(i)))
if u == 0 {
break
}
us = append(us, u)
i++
}
*retVal = syscall.UTF16ToString(us)
ole.CoTaskMemFree(uintptr(retValPtr))
return
}
func ascSetDisplayName(asc *IAudioSessionControl, value *string, eventContext *ole.GUID) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().SetDisplayName,
3,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(value)),
uintptr(unsafe.Pointer(eventContext)))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascGetIconPath(asc *IAudioSessionControl, retVal *string) (err error) {
var retValPtr uint64
hr, _, _ := syscall.Syscall(
asc.VTable().GetIconPath,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(&retValPtr)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
var us []uint16
var i uint32
var start = unsafe.Pointer(uintptr(retValPtr))
for {
u := *(*uint16)(unsafe.Pointer(uintptr(start) + 2*uintptr(i)))
if u == 0 {
break
}
us = append(us, u)
i++
}
*retVal = syscall.UTF16ToString(us)
ole.CoTaskMemFree(uintptr(retValPtr))
return
}
func ascSetIconPath(asc *IAudioSessionControl, value *string, eventContext *ole.GUID) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().SetIconPath,
3,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(value)),
uintptr(unsafe.Pointer(eventContext)))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascGetGroupingParam(asc *IAudioSessionControl, retVal *ole.GUID) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().GetGroupingParam,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(retVal)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascSetGroupingParam(asc *IAudioSessionControl, override *ole.GUID, eventContext *ole.GUID) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().SetGroupingParam,
3,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(override)),
uintptr(unsafe.Pointer(eventContext)))
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascRegisterAudioSessionNotification(asc *IAudioSessionControl, newNotifications *IAudioSessionEvents) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().RegisterAudioSessionNotification,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(newNotifications)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
return
}
func ascUnregisterAudioSessionNotification(asc *IAudioSessionControl, newNotifications *IAudioSessionEvents) (err error) {
hr, _, _ := syscall.Syscall(
asc.VTable().UnregisterAudioSessionNotification,
2,
uintptr(unsafe.Pointer(asc)),
uintptr(unsafe.Pointer(newNotifications)),
0)
if hr != 0 {
err = ole.NewError(hr)
}
return
}