在electron中使用koffi库怎么调用windowapi的AccSetRunningUtilityState函数?

在electron中使用koffi库怎么调用windowapi的AccSetRunningUtilityState函数?

AccSetRunningUtilityStat函数会把除特定窗口外的系统声音变小,接受3个参数,第一个参数需要传入当前窗口的句柄。我用的windowapi的GetForegroundWindow函数,得到的是一串6位长度的数字。但传入AccSetRunningUtilityStat函数后没有生效,包括当前窗口的所有系统声音都变小了。

import koffi from 'koffi'
const oleacc = koffi.load('oleacc.dll');
const user32 = koffi.load('user32.dll');

const getHwnd = user32.func('int __stdcall GetForegroundWindow()');
const hwnd = getHwnd();

const voiceChange = oleacc.func('int __stdcall AccSetRunningUtilityState(int hwndApp, uint dwUtilityStateMask, uint dwUtilityState)')

voiceChange(hwnd,...)

调用voiceChange是生效的,但是所有声音都变小了(应该是hwnd的问题)。

对c++没什么了解,koffi文档只看懂了函数怎么调用。这里的hwnd类型是不是不应该是数字,而是一个指针。如果是的话,用koffi应该怎么包装它呢?

阅读 2.5k
1 个回答
import koffi from 'koffi';

// 加载 DLL
const oleacc = koffi.load('oleacc.dll');
const user32 = koffi.load('user32.dll');

// 定义 GetForegroundWindow 函数
const getHwnd = user32.func('HWND __stdcall GetForegroundWindow()');

// 获取前台窗口句柄
const hwnd = getHwnd();
console.log(`Foreground window handle: ${hwnd}`);

// 定义 AccSetRunningUtilityState 函数
const voiceChange = oleacc.func('int __stdcall AccSetRunningUtilityState(HWND hwndApp, DWORD dwUtilityStateMask, DWORD dwUtilityState)');

// 调用 AccSetRunningUtilityState 函数
const result = voiceChange(hwnd, 0x1, 0x1);  // 这里的参数需要根据实际的需求进行调整
console.log(`AccSetRunningUtilityState result: ${result}`);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题