当前位置: 首页 > 知识库问答 >
问题:

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

岳嘉良
2024-06-28

在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应该怎么包装它呢?

共有1个答案

狄旭
2024-06-28
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}`);
 类似资料:
  • 问题内容: 为什么可以用经node.js测试的JavaScript调用此函数: 为什么最后一次呼叫“” 有效?是node.js中的错误,V8引擎中的错误,正式未定义的行为还是对所有解释程序实际上有效的JavaScript? 问题答案: 似乎是Node REPL错误,将这两行放在会导致语法错误。 错误: 问题已提交#6634。 转载于v0.10.20。 v0.11.7已修复此问题。

  • 本文向大家介绍函数的调用栈是怎么工作的?相关面试题,主要包含被问及函数的调用栈是怎么工作的?时的应答技巧和注意事项,需要的朋友参考一下 1.首次运行JS代码时,会创建一个全局执行上下文,push到当前的执行栈中,每当发生函数调用,都会为该函数创建一个函数执行上下文并push到当前执行栈的栈顶 2.当栈顶的函数执行完以后,其对应的函数执行上下文将会从执行栈中pop出去,执行上下文的控制权将移动到当前

  • 问题内容: 我有一个简化的函数,看起来像这样: 基本上,我希望它调用,并返回在回调lambda中给出的响应。但是,上面的代码不起作用,只是立即返回。 只是出于非常骇人的尝试,我尝试了以下无效的方法,但是至少您了解了我要实现的目标: 基本上,实现此目的的“ node.js /事件驱动”良好方式是什么?我希望我的函数等待,直到调用回调,然后返回传递给它的值。 问题答案: 做到这一点的“良好的node.

  • 请问下,在electron项目中,数据库路径是使用哪个呢? 在开发Electorn的时候,我们有开发环境和生产环境, 1、请问下,是否需要这里进行一下区分加载? 比如: 判定当前环境是开发环境,就加载/src/main/db/下的数据库文件; 判定当前环境是生产环境,就按照上面截图的方式加载数据库文件?(不存在还需要创建)

  • 问题内容: 如何获得调用当前函数的函数的名称和行?我想要一个像这样的基本调试功能(使用npmlog定义): 当从另一个函数调用时,它将是这样的: 为了清楚起见,我想要的基本上与[ython中的类似: 是否有等效的Node来完成此任务? 问题答案: 您可以添加一些原型以提供从V8访问此信息的权限: 分别返回“ 28”和“ foo”。

  • 问题内容: 我正在尝试使用Electron(以前是Atom Shell)为Twitter写一个包装。 我的文件(它看起来与“ Hello World ”示例几乎相同,只是在一个地方进行了更改): 我尝试在此之后立即调用函数,但是它不执行。 我了解该文件就像应用程序的服务器端一样,但是问题是…如何在页面上调用JavaScript函数?我应该在哪里编写代码? 例如,我要执行以下操作: 问题答案: 我已