Perl для системного администрирования



Управление процессами в NT/2000 - часть 7


".Win32: :Setupsup: ,GetLast.Error()

Два последних аргумента необязательны. Первый завершает процесс и, соответственно, устанавливает его код завершения (по умолчанию это 0). Второй аргумент позволяет вам завершать системные процессы (при условии, что у вас есть право Debug Prog rans).

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

Win32: :Setuosup: : EnuTiWiPdows( \awinduwiisi;) or die

Win32: :Setuosp: :GetUstError( @windowlist

теперь содержит список дескрипторов окон, которые выглядят как обычные числа, если их напечатать. Чтобы узнать больше о каждом окне, можно использовать несколько различных функций. Например, чтобы прочитать заголовки всех окон, воспользуемся функцией GetWindowText():

use Win32::Setupsup;

Win32::Setupsup::EnumWindOws(\@windowlist) or die

"Ошибка получения списка процессов:

".Win32::Setupsup::GetLastError()."\n"

foreach Swhandle (@windowlist){

if (Win32::Setupsup::GetWindowText($whandle,\$text)){

print "$whandle: $text","\n"; }

else { warn

"Невозможно получить текст для Swhandle" .

Win32::Setupsup::Get LastError()."\n"; >

}

Вот небольшой отрывок получаемых данных:

66130: chapter02 - Microsoft Word

66184: Style

194905150:

66634: setupsup - WordPad

65716: Fuel

328754: DDE Server Window

66652:

66646:

66632: OleMainThreadWndName

Как видите, у некоторых окон есть заголовки, а у некоторых их нет. Внимательные читатели могли заметить в этом отрывке еще кое-что любопытное. Окно 66130 принадлежит сеансу Microsoft Word, запущенному в настоящий момент (в нем набиралась эта глава). Окно 66184 смутно напоминает название еще одного окна, связанного с Microsoft Word. Как мы можем узнать, действительно ли эти окна взаимосвязаны?

В Win32: :Setupsup также есть функция EnumChildWindows(), которая позволяет вывести список дочерних окон для любого окна. Используем ее для вывода иерархии текущего окна:

use Win32::Setupsup:




Содержание  Назад  Вперед