К сожалению для вас, причина, по которой вы не можете найти ничего изменяющегося, заключается в том, что в Windows «explorer.exe», который отвечает практически за все операции с файлами (файловый проводник, управление рабочим столом и т. д.), всегда открыт и запускается из единичный экземпляр. Я не знаю, как вы можете сделать это из python, но у меня есть решение, которое вы можете включить, даже если оно не идеально.
Используя PIL, можно найти здесь http://www.pythonware.com/products/pil/. , вы можете получить изображение экрана и проверить цвета пикселей в определенных точках, что должно позволить то, что вам нужно в данный момент. Если вам нужно захватить цвета пикселей с экрана, лучшим инструментом, который я могу придумать для быстрых макетов, будет autohotkeys window spy.
Надеюсь, это поможет, я знаю, как иногда может раздражать автоматизация, когда вам приходится делать подобные хаки, поэтому дайте мне знать, если у вас есть другие вопросы.
Правка: я размышлял над идеей, что когда проводник открыт, количество дескрипторов, открытых проводником, увеличится с приличным отрывом, и если вы этого не сделаете, все, кроме запуска автоматических сценариев, поведение довольно предсказуемо, но потребует небольшого эксперимента с вашей стороны.
Вот что у меня есть:
import psutil
for proc in psutil.process_iter():
if 'explorer' in proc.name():
print(proc.name() + " handles:" + str(proc.num_handles()))
Когда я запускаю это с закрытым проводником по сравнению с открытым проводником, я получаю случайное увеличение примерно на 100 дескрипторов или более, поэтому вы можете сохранить предыдущее количество и опросить текущее количество при условии, что вы ничего не открываете. когда количество дескрипторов увеличивается на X, вы знаете, что проводник был открыт и может начать печатать, затем, когда он упадет до X, вы знаете, что он закрыт, и вы повторно сохраняете новый счетчик дескрипторов и снова ждете увеличения X.
Хотя это не идеальное решение, вы должны быть в состоянии заставить его работать достаточно хорошо для того, что вы хотите.
Редактировать2:
Это работает для меня, вам может потребоваться изменить значение normalIncrease, так как это может быть большее или меньшее количество созданных дескрипторов.
import psutil
import time
handlesPrevious = 0
usualIncrease = 100
for proc in psutil.process_iter():
if 'explorer' in proc.name():
handlesPrevious = proc.num_handles()
while 1:
time.sleep(5)
for proc in psutil.process_iter():
if 'explorer' in proc.name():
handlesCurrent = proc.num_handles()
if (handlesPrevious + usualIncrease) <= handlesCurrent:
print("File explorer open! - handles:" + str(handlesCurrent) + " previous handles:" + str(handlesPrevious))
handlesPrevious = handlesCurrent
elif (handlesPrevious - usualIncrease) > handlesCurrent:
print("File explorer not open! - handles:" + str(handlesCurrent))
handlesPrevious = handlesCurrent
person
vividpk21
schedule
20.08.2018
explore C:\Spam
, программаexplore.exe
запускается, находит существующий процесс File Explorer, сообщает ему открыть окно дляC:\Spam
, а затем завершает работу. Таким образом, после того, как это будет сделано, набор запущенных процессов обычно будет точно таким же, как и раньше. - person abarnert   schedule 21.08.2018process_iter
. - person abarnert   schedule 21.08.2018explorer
— это процесс, который отображает ваш рабочий стол — когда он дает сбой, ваша панель задач, значки и другие элементы на вашем рабочем столе обычно исчезают (и это только самое заметное изменение). - person LinkBerest   schedule 21.08.2018