Что нового

Список запущенных окон

Nikkor

Новичок
Сообщения
12
Репутация
0
Добрый день!
Хочу получить список запущенных приложений с расширениями,т.е. получить название запущенного файла по его названию на диске с расширением.
Подскажите пожалуйста,как это можно реализовать.
Заранее благодарен.
--------------------------------------------------------------------------------------
Когда добавил свою тему,выдало список похожих тем,и там увидел функцию " Мониторинг активных процессов и их окон" от автора Dwerf,хотя и искал что-то подобное.Если нет ничего проще,попробую воспользоваться этим.
Может есть решение проще?
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Я так и не уловил, то ли список окон, то ли список процессов, то ли ещё что-то.

Код:
#include <array.au3>

;Список окон
$aWinList = WinList()
_ArrayDisplay($aWinList)

;Список процессов
$aProcessList = ProcessList()
_ArrayDisplay($aProcessList)
 
Автор
N

Nikkor

Новичок
Сообщения
12
Репутация
0
Проще говоря работаю с Excel, и мне нужно отловить в списке запущенных окон именно те,что с расширением xls.Когда у пользователя в свойствах папки стоит галка "скрывать расширения для зарегистрированных типов файлов",расширение в диспетчере приложений не показывает,и я не могу определить функцией WinList() к какому типу файлов принадлежит это окно.Хотелось бы знать,какому типу файлов соответствует запущенное окно.
Иногда бывает неясно выражаюсь.Вот как-то так.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
В принципе можно отловить окна запущенные процессами с названием "excel.exe".
Берём список окон и список процессов "excel.exe" и проверяем, не совпадают ли данные.
Код:
#include <array.au3>

Local $aWinList = WinList()
Local $aProcessList = ProcessList('excel.exe')
Local $aExcelList

For $i = 1 To $aWinList[0][0] Step +1
	For $i2 = 1 To $aProcessList[0][0]
		If WinGetProcess($aWinList[$i][1]) = $aProcessList[$i2][1] Then $aExcelList &= $aWinList[$i][1] & '|'
	Next
Next

If $aExcelList = '' Then Exit
$aExcelList = StringSplit(StringTrimRight($aExcelList, 1), '|')

_ArrayDisplay($aExcelList)

А вообще с Excel можно работать через Com-интерфейс, в справке есть пользовательские функции начинающиеся на _Excel. Если есть желание - посмотрите. Кокретнее подсказать не смогу, у меня Excel нет, тестить не на чем.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Nikkor,
Если с Excel, то можно так попробовать:
Код:
#include <Array.au3>

Dim $aExcelOpen[1]
$i = 0
$o_Result = ObjGet("", "Excel.Application")
If Not IsObj($o_Result) Then
	MsgBox(0, '', 'No Excel')
	Exit
EndIf
$o_workbooks = $o_Result.Application.Workbooks
If Not IsObj($o_workbooks) Then
	MsgBox(0, '', 'Error')
	Exit
EndIf
For $o_workbook In $o_workbooks
	$i += 1
	ReDim $aExcelOpen[$i + 1]
	$aExcelOpen[$i] = $o_workbook.FullName
Next
If $i Then
	$aExcelOpen[0] = 'Open Excel Books ' & $i
	_ArrayDisplay($aExcelOpen)
EndIf


PS
Все окна Excel имеют класс XLMAIN, так покажет все открытые книги Excel:
Код:
#include <Array.au3>

$aListExcel = WinList('[CLASS:XLMAIN]')
_ArrayDisplay($aListExcel)
 
Автор
N

Nikkor

Новичок
Сообщения
12
Репутация
0
Спасибо madmasles за исчерпывающий ответ.Последнее наверно лучше всего подойдет.
 
Автор
N

Nikkor

Новичок
Сообщения
12
Репутация
0
Код:
#include <Array.au3>

$aListExcel = WinList('[CLASS:XLMAIN]')
_ArrayDisplay($aListExcel)


Этим примером не показывает все открытые книги,а вот первый пример работает корректно.Тогда еще вопрос: на всех ли машинах(операционках) будет работать корректно данная функция?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
Nikkor
Не нужно разукрашивать код, на форуме есть тег autoit который сам всё (почти) прекрасно разукрашивает.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Nikkor [?]
на всех ли машинах(операционках) будет работать корректно данная функция
У меня работает на Windows XP SP3(32) и на Windows 7(32), на Office 2003, 2007 и 2010.
Другие - проверить негде.
 
Автор
N

Nikkor

Новичок
Сообщения
12
Репутация
0
madmasles

Продублировал здесь,а то в личку отправилось с ошибкой.
Добрый день!
А не подскажите,где можно получить подробную информацию по COM обьектам Excel,какие свойства и методы поддерживает.Смотрел MSDN, но конкретно по COM ничего не нашел.
Заранее благодарю.
 
Верх