Что нового

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

Nikkor

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

dwerf

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

Код:
#include <array.au3>

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

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

Nikkor

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

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
В принципе можно отловить окна запущенные процессами с названием "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 319
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 472
Репутация
2 401
Nikkor
Не нужно разукрашивать код, на форуме есть тег autoit который сам всё (почти) прекрасно разукрашивает.
 

madmasles

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

Nikkor

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

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