我有一個在Windows上運行的NodeJS應用程序,需要在用戶執行特定操作時顯示並將焦點切換到正在運行的Windows應用程序。我一直在使用node-ffi包進行windows API調用,但一直沒有能夠使其切換焦點。這是我正在使用的代碼。它成功地獲取HWND正在運行的計算器應用程序,但隨後試圖將焦點切換到該HWND,它只能有時:將焦點設置爲來自Node-JS的Windows應用程序
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應用程序始終移動到訂單的頂部,即使它當前已最小化。
你說這兩個,它始終適用於最小化窗口以及它不一致工作。哪一個是真的? – IInspectable
您不檢查錯誤。閱讀SetForegroundWindow的文檔,特別是條件列表。 –
@IInspectable它總是會將最小化的窗口帶到頂部。如果一個窗口沒有被最小化,但是隻在另一個窗口的後面,它只會間歇性地將其置於頂端。 – KeithTheBiped