vbscript: как скрыть окно процесса, зная его ProcessID ?
От: Domnitch  
Дата: 06.12.15 21:23
Оценка:
У меня задача — запустить некое консольное приложение, работающее несколько минут, и перехватить его вывод.
Примерно так:

Dim WshShell, oExec, cmd
' Some command string - does not matter
cmd = "find " + CHR(34) + "qwerty" + CHR(34) + " c:\windows\system32\x*.*"
 
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec(cmd)
 
Do While oExec.Status = 0
     WScript.Sleep 100
Loop
 
WScript.Echo oExec.ExitCode
WSCript.echo oExec.StdOut.ReadAll
WSCript.echo oExec.StdErr.ReadAll
Проблема в том, что при этом открывается консольное окно, которое мне совершенно не нужно.
Легко получить oExec.ProcessID, но как средствами VBS найти соответствующее окно и скрыть его?

Заранее благодарен за помощь.
Re: vbscript: как скрыть окно процесса, зная его ProcessID ?
От: PA  
Дата: 07.12.15 22:08
Оценка:
Здравствуйте, Domnitch, Вы писали:

D>У меня задача — запустить некое консольное приложение, работающее несколько минут, и перехватить его вывод.


Можно консольку запускать не через exec, а через run — там есть параметр, позволяющий скрыть окно.
А stdout и stderr при этом перенаправить во временные файлы через 1> и 2>
Re[2]: vbscript: как скрыть окно процесса, зная его ProcessID ?
От: Domnitch  
Дата: 08.12.15 09:22
Оценка:
Здравствуйте, PA, Вы писали:

PA>Можно консольку запускать не через exec, а через run — там есть параметр, позволяющий скрыть окно.

PA>А stdout и stderr при этом перенаправить во временные файлы через 1> и 2>

Да, это работает, но уж больно некрасиво; еще и временные файлы плодятся.
А вот как бы до окна дотянуться? Ведь ProcessID уже в руках...
Re[3]: vbscript: как скрыть окно процесса, зная его ProcessID ?
От: Salih  
Дата: 09.01.16 10:25
Оценка: +1
Здравствуйте, Domnitch, Вы писали:

D>Здравствуйте, PA, Вы писали:


PA>>Можно консольку запускать не через exec, а через run — там есть параметр, позволяющий скрыть окно.

PA>>А stdout и stderr при этом перенаправить во временные файлы через 1> и 2>

D>Да, это работает, но уж больно некрасиво; еще и временные файлы плодятся.

D>А вот как бы до окна дотянуться? Ведь ProcessID уже в руках...

перечисляя все окна с помощью EnumChildWindows, найти hwnd окна, которое нужно скрыть.
во время перечисления необходимо смотреть на ProcessId с помощью функции GetWindowThreadProcessId

далее всё просто, устанавливай у окна флаг скрыть. здесь подробнее ссылка
Re[4]: vbscript: как скрыть окно процесса, зная его ProcessID ?
От: Evgeniy Skvortsov Россия  
Дата: 03.02.16 18:36
Оценка:
Здравствуйте, Salih, Вы писали:

S>перечисляя все окна с помощью EnumChildWindows, найти hwnd окна, которое нужно скрыть.

S>во время перечисления необходимо смотреть на ProcessId с помощью функции GetWindowThreadProcessId

Осталось еще рассказать каким образом из VBS скрипта можно получить доступ к WINAPI функциям.

По факту сделать такое без использования сторонних компонентов нельзя.
Если есть вариант зарегистрировать в системе сторонний ActiveX, то можно погуглить в сторону windowsystemobject или dynwrapx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.