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

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.

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

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

  • 看官网上的还要装nodejs,我写的项目连js都用不到,单纯的展示就行

  • 本文向大家介绍超链接怎么正确调用javascript函数,包括了超链接怎么正确调用javascript函数的使用技巧和注意事项,需要的朋友参考一下 点击超链接调用 JavaScript 函数,一般人都用: 但这有个缺点,就是点击链接后,页面上的GIF动画将静止。 试看如下代码: 解决方法探讨: 此时不影响动画显示,但鼠标移上去后,鼠标及超链接样式不发生变化,虽然可以利用样式表来改变鼠标及超链接样式

  • 问题内容: 这类似于Node.js的Stream数据,但是我觉得这个问题没有得到足够的回答。 我正在尝试使用jQuery ajax调用(get,load,getJSON)在页面和node.js服务器之间传输数据。我可以从浏览器中找到该地址,然后看到“ Hello World!”,但是当我从页面尝试此操作时,它失败并显示没有任何响应。我设置了一个简单的测试页面和hello world示例进行测试: