2010-09-14 4 views
2

Есть ли какой-либо метод в JScript, чтобы получить дескриптор главного окна процесса, указав имя процесса? Свойство Process.MainWindowHandle работает только в JScript .NET. Есть ли что-либо подобное в классическом JScript?Как получить дескриптор главного окна процесса с использованием JScript?

ответ

0

Я не уверен, что это работает, просто попробуйте петлю window.parent до ее неопределенного.

что-то вроде -

var mainWindow = window; 
while(mainWindow.parent) { 
    mainWindow = mainWindow.parent; 
} 

у вас также есть что-то вроде window.top который всегда возвращает вам самое верхнее окно. Но не уверен, поддерживается ли это всеми браузерами.

+1

Я использую ту же петлю, что и Sachin, чтобы убедиться, что я руки в самом верхнем окне. Это просто работает. –

+0

Sachin, у меня нет ручки ни одному из дочерних окон. У меня только имя процесса. Я думаю, что вышеуказанный цикл будет повторяться до тех пор, пока родительское окно не вернется в неопределенное состояние. Пожалуйста, поправьте меня, если мое предположение ошибочно. – satya

+0

@ rainbow365 - вам не нужно иметь обработчик дочернего окна, чтобы использовать объект окна. Он всегда возвращает вам текущее окно, в котором вы сейчас работаете. Проверьте это - http://msdn.microsoft.com/en-us/library/ms535873(v=VS.85).aspx –

0

JScript и Windows Script Host не имеют этой функции, и WMI также не имеет.

Если PowerShell вариант для вас, то вы можете использовать Process.MainWindowHandle свойство, которое вы упомянули:

(Get-Process notepad).MainWindowHandle 

В противном случае, вам нужно найти или написать утилиту (COM объект, инструмент командной строки и т.д.), который предоставит эту функциональность и вызовет этот инструмент из вашего скрипта.


Edit: Так что вам нужно, чтобы закрыть окно - это задача автоматизации пользовательского интерфейса.

Windows Script Host обеспечивает очень ограниченную функциональность автоматизации пользовательского интерфейса. Если вы знаете название окна, вы можете попробовать использовать методы AppActivate и SendKeys для активации этого окна и отправить Alt + F4 ярлык на него. Вы можете найти пример this answer. (Код находится в VBScript, но он должен дать вам эту идею.) Однако этот подход не является надежным.

Если вы действительно не хотите убивать процесс, самым простым решением является использование стороннего инструмента автоматизации пользовательского интерфейса. Например, вы можете попробовать бесплатный инструмент AutoIt - я думаю, он должен быть в состоянии выполнить то, что вам нужно.


Edit 2: Вы пробовали запись закрытия окна? Вы должны получить такой скрипт:

Sys.Process("notepad").Window("Notepad", "Untitled - Notepad").Close(); 

Разве это не то, что вам нужно?

+1

Спасибо, Елена за ответ. Я хочу закрыть главное окно процесса, имя которого называется xyz.exe. Я не хочу использовать метод terminate(), поскольку это убьет процесс, а не официально закрывает приложение. Для меня это хорошо, если есть другие способы закрыть приложение, а не убить или прекратить процесс. – satya

+0

Извините, Хелен, я забыл упомянуть. Я использую Test complete tool для закрытия окна. поэтому я могу автоматизировать процесс закрытия с помощью инструмента. Единственное, что мне нужно - это получить заголовок окна, чтобы я передал его инструменту автоматизации, чтобы закрыть его. Поскольку может быть более одного процесса, существует одноименное имя (у каждого есть свое главное окно, например: iexplore.exe). Я хочу как-то извлечь заголовок окна, посылая имя процесса в качестве входного. – satya

+0

@ rainbow365 Примечание: вы всегда должны включать такие детали в свои исходные вопросы. Люди не являются телепатами и не знают, что детали не смогут вам помочь. – Helen

0

Для родного приложения win32 нет такого понятия, как «главное окно». Процесс может не иметь окон вообще или нескольких главных «главных» окон верхнего уровня.

0

Ну, однажды мне пришлось написать надстройку для Outlook. Мой босс хочет, чтобы при загрузке Outlook появлялся всплывающий экран. Но окно Outlook просматривает всплеск. После большого поиска я нашел FindWindowhttp://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28FINDWINDOW%29%3bk%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29%3bk%28DevLang-CSHARP%29&rd=true это поможет. Эта функция находит окно на основе заголовка окна и имени класса окна. Я p-вызвал его и использовал его с C#. Если вы можете использовать эту функцию через JScript, я думаю, что она может выполнить эту работу за вас. (Я использовал Spy ++ для определения параметра lpClassName)