Abre un progtwig con python minimizado u oculto

Lo que estoy tratando de hacer es escribir un script que abra una aplicación solo en la lista de procesos. Lo que significa que sería “oculto”. Ni siquiera sé si es posible en python.

Si no fuera posible, me conformaría con una función que permitiera que un progtwig se abriera con python en un estado minimizado, tal vez algo como esto:

import subprocess def startProgram(): subprocess.Hide(subprocess.Popen('C:\test.exe')) # I know this is wrong but you get the idea... startProgram() 

Alguien sugirió usar win32com.client pero la cosa es que el progtwig que quiero iniciar no tiene un servidor COM registrado bajo el nombre.

¿Algunas ideas?

Debería usar win32api y ocultar su ventana; por ejemplo, usando win32gui.EnumWindows puede enumerar todas las ventanas superiores y ocultar su ventana

Aquí hay un pequeño ejemplo, puedes hacer algo como esto:

 import subprocess import win32gui import time proc = subprocess.Popen(["notepad.exe"]) # lets wait a bit to app to start time.sleep(3) def enumWindowFunc(hwnd, windowList): """ win32gui.EnumWindows() callback """ text = win32gui.GetWindowText(hwnd) className = win32gui.GetClassName(hwnd) #print hwnd, text, className if text.find("Notepad") >= 0: windowList.append((hwnd, text, className)) myWindows = [] # enumerate thru all top windows and get windows which are ours win32gui.EnumWindows(enumWindowFunc, myWindows) # now hide my windows, we can actually check process info from GetWindowThreadProcessId # http://msdn.microsoft.com/en-us/library/ms633522(VS.85).aspx for hwnd, text, className in myWindows: win32gui.ShowWindow(hwnd, False) # as our notepad is now hidden # you will have to kill notepad in taskmanager to get past next line proc.wait() print "finished." 

Es fácil 🙂
Python Popen Acepta Estructura STARTUPINFO …
Acerca de la estructura de STARTUPINFO: https://msdn.microsoft.com/en-us/library/windows/desktop/ms686331(v=vs.85).aspx

Ejecutar oculto:

 import subprocess def startProgram(): SW_HIDE = 0 info = subprocess.STARTUPINFO() info.dwFlags = subprocess.STARTF_USESHOWWINDOW info.wShowWindow = SW_HIDE subprocess.Popen(r'C:\test.exe', startupinfo=info) startProgram() 

Ejecutar minimizado:

 import subprocess def startProgram(): SW_MINIMIZE = 6 info = subprocess.STARTUPINFO() info.dwFlags = subprocess.STARTF_USESHOWWINDOW info.wShowWindow = SW_MINIMIZE subprocess.Popen(r'C:\test.exe', startupinfo=info) startProgram() 

¿Cuál es el propósito?

Si desea que un proceso oculto (sin ventana) funcione en segundo plano, la mejor manera sería escribir un servicio de Windows e iniciarlo / detenerlo utilizando el mecanismo de servicio de ventana habitual. El servicio de Windows se puede escribir fácilmente en python, por ejemplo, aquí forma parte de mi propio servicio (no se ejecutará sin algunas modificaciones)

 import os import time import traceback import pythoncom import win32serviceutil import win32service import win32event import servicemanager import jagteraho class JagteRahoService (win32serviceutil.ServiceFramework): _svc_name_ = "JagteRaho" _svc_display_name_ = "JagteRaho (KeepAlive) Service" _svc_description_ = "Used for keeping important services eg broadband connection up" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.stop = False def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) self.log('stopping') self.stop = True def log(self, msg): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_,msg)) def SvcDoRun(self): self.log('folder %s'%os.getcwd()) self.ReportServiceStatus(win32service.SERVICE_RUNNING) self.start() def shouldStop(self): return self.stop def start(self): try: configFile = os.path.join(jagteraho.getAppFolder(), "jagteraho.cfg") jagteraho.start_config(configFile, self.shouldStop) except Exception,e: self.log(" stopped due to eror %s [%s]" % (e, traceback.format_exc())) self.ReportServiceStatus(win32service.SERVICE_STOPPED) if __name__ == '__main__': win32serviceutil.HandleCommandLine(AppServerSvc) 

y puedes instalarlo por

 python svc_jagteraho.py--startup auto install 

y ejecutarlo por

 python python svc_jagteraho.py start 

También apareceré en la lista de servicios, por ejemplo, services.msc lo mostrará y podrá iniciarlo / detenerlo, o puede usar la línea de comandos.

 sc stop jagteraho 

Si lo que aparece es un terminal, redirija la salida estándar del proceso.