voicemeeter-api-python/voicemeeterlib/inst.py

44 lines
1.0 KiB
Python

import ctypes as ct
import platform
import winreg
from pathlib import Path
from .error import InstallError
bits = 64 if ct.sizeof(ct.c_voidp) == 8 else 32
if platform.system() != "Windows":
raise InstallError("Only Windows OS supported")
VM_KEY = "VB:Voicemeeter {17359A74-1236-5467}"
REG_KEY = "".join(
[
"SOFTWARE",
("\\WOW6432Node" if bits == 64 else ""),
"\\Microsoft\\Windows\\CurrentVersion\\Uninstall",
]
)
def get_vmpath():
with winreg.OpenKey(
winreg.HKEY_LOCAL_MACHINE, r"{}".format(REG_KEY + "\\" + VM_KEY)
) as vm_key:
return winreg.QueryValueEx(vm_key, r"UninstallString")[0]
try:
vm_path = Path(get_vmpath())
except FileNotFoundError as e:
raise InstallError(f"Unable to fetch DLL path from the registry") from e
vm_parent = vm_path.parent
DLL_NAME = f'VoicemeeterRemote{"64" if bits == 64 else ""}.dll'
dll_path = vm_parent.joinpath(DLL_NAME)
if not dll_path.is_file():
raise InstallError(f"Could not find {dll_path}")
libc = ct.CDLL(str(dll_path))