2016-04-13 3 views
-1

Используя python, я должен уметь обнаруживать, когда пользователь закрыл окно проводника Windows. Сначала я попробовал PID, прежде чем понял, что все это связано с центральным процессом «explorer.exe» :(classic noobish me (это означало, что PID не был изменен вообще после его закрытия). Поэтому мой вопрос: как бы я мог обнаружить, когда окна оконника окон были закрыты. Спасибо :)Как определить, когда окно проводника Windows было закрыто?

Вот мой текущий код (он определенно работает, но он не может обнаружить, когда он закрывается, поскольку explorer.exe также запускает панель задач и т.д.):

import psutil 
import re 

def check4pid(PROCNAME): 

for proc in psutil.process_iter(): 
    if proc.name() == PROCNAME: 
     PIDX=re.search('pid=(.*?), name',str(proc)).group(1) 
     #print proc 
     print PIDX 
if psutil.pid_exists(int(PIDX)): 
    print "a process with PID %d exists" % int(PIDX) 
else: 
    print "a process with PID %d does not exist" % int(PIDX) 

check4pid ("explorer.exe")

+0

Возможные дубликатом [запущенных процессов списка на 64-битной Windows] (http://stackoverflow.com/questions/1632234/list-running-processes-on-64 -битные окна) – Torxed

+0

Не знаете, сколько поддержки COM вы получаете от Python, но это то, как вы это сделаете (без грубого форсирования, как это предлагает @Torxed): [Большая небольшая программа: мониторинг окон Internet Explorer и Explorer , часть 3: Отслеживание создания и уничтожения] (https://blogs.msdn.microsoft.com/oldnewthing/20130614-00/?p=4083/). – IInspectable

+0

@Ilnspectable Я никогда не предлагал грубую силу, которая является стандартным средством коммуникации в окнах, так же как DBUS является стандартным протоколом/инструментом обмена сообщениями в Linux (да, я знаю, это плохое сравнение). Использование модуля wmi в python более элегантно, чем любой фрагмент или код C, который вы только что связали? – Torxed

ответ

-1

вы использовали psutil?

Это может помочь вам,

import psutil 
list = psutil.pids() 

for i in range(0, len(list)): 
    try: 
     prc = psutil.Process(list[i]) 
     if prc.cmdline()[0].find("explorer.exe") = 1: 
      print ('Explorer found open') 
      break; 
    except: 
     print('Explorer not found open') 
+0

И ... как именно это поможет вам контролировать, что экземпляр Explorer был закрыт? Кроме того, проверка * * explorer.exe * * в командной строке безумно хрупка. – IInspectable

+0

Вы хотите отслеживать, закрыт ли исследователь конкретным пользователем? –

+0

Ни одно окно не закрыто. –