ユーザーが特定のアクションを実行したときに、実行中の Windows アプリケーションを表示してフォーカスを切り替える必要がある Windows 上で実行されている NodeJS アプリケーションがあります。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 アプリケーションを常に順序の一番上に移動させる方法がわかりません。