【发布时间】:2017-01-18 03:58:05
【问题描述】:
我有一个在 Windows 上运行的 NodeJS 应用程序,当用户执行特定操作时,它需要显示并将焦点切换到正在运行的 Windows 应用程序。我一直在使用 node-ffi 包进行 Windows API 调用,但无法使其始终如一地切换焦点。这是我正在使用的代码。它成功获取了正在运行的计算器应用程序的 HWND,但随后尝试将焦点切换到该 HWND,但它仅在某些时候有效:
var ffi = require('ffi');
var intPtr = ref.refType('long');
var user32 = new ffi.Library('user32', {
'FindWindowA': ['long', [ 'string', 'string']],
'SetForegroundWindow': ['bool', ['long']],
'BringWindowToTop': ['bool', ['long']],
});
var winToSetOnTop = user32.FindWindowA(null,"calculator")
var res = user32.ShowWindow(winToSetOnTop, 9);
res = user32.SetForegroundWindow(winToSetOnTop);
res = user32.BringWindowToTop(winToSetOnTop);
这种命令组合似乎是我尝试过的最一致的命令,但它并不总是有效。如果我想切换焦点的窗口被最小化,它总是会弹出到顶部。如果窗口没有最小化,而只是在另一个窗口后面,它只会间歇性地显示。我不确定如何始终如一地让正在运行的 Windows 应用程序始终移动到顺序的顶部,即使它当前已最小化。
【问题讨论】:
-
你说两个,它总是适用于最小化的窗口,以及它不能始终如一地工作。哪一个是真的?
-
您不检查错误。阅读 SetForegroundWindow 的文档,尤其是条件列表。
-
@IInspectable 它将始终将最小化的窗口带到顶部。如果一个窗口没有最小化,而只是在另一个窗口的后面,它只会间歇性地把它带到顶部。
标签: javascript node.js winapi node-ffi