Откройте каталог в File Explorer из консоли и верните фокус обратно в консоль.

Используя следующий код, я могу открыть папку в Проводнике в Windows 10:

require('child_process').exec('start "" "c:\test"');

Это хорошо работает. Однако основное внимание уделяется недавно открытому окну. Я использую это из сценария узла и запрашиваю ввод от пользователя после того, как окно было открыто. Это раздражает пользователей, поскольку им приходится вручную щелкать внутри окна консоли, чтобы ответить на запрос ввода.

Есть ли способ, что вышеприведенная команда может быть изменена, чтобы либо не уделять внимание открытому окну в первую очередь. Или заставить фокус вернуться в окно консоли?

Всего 1 ответ


Это не красиво и не быстро, но должно работать:

require('child_process').execFile(
 'powershell.exe', 
 [ 
   '-Command', 
   'Add-Type -AssemblyName Microsoft.VisualBasic; 
    [Microsoft.VisualBasic.Interaction]::Shell('explorer.exe "c:\test"', 'NormalNoFocus')'
 ]
);

Выше заметно запускает проводник файлов с каталогом c: est , но не дает фокус нового окна.

Ни внутренняя команда start cmd.exe ни PowerShell не имеют для этого встроенной функции, но способность PowerShell загружать сборки .NET и взаимодействовать с их типами позволяет использовать решение на основе Microsoft.VisualBasic.Interaction.Shell .

Обратите внимание, что из-за вызова powershell.exe вызывается Windows PowerShell ; этот метод не работает с pwsh.exe (PowerShell [Core] v6 +), поскольку метод Shell недоступен в .NET Core.


Есть идеи?

10000