Откройте программу с Python, минимизированным или скрытым

То, что я пытаюсь сделать, должно записать сценарий, который открыл бы приложение только в списке процессов. Значение его было бы "скрыто". Я даже не знаю если его возможное в Python.

Если бы не возможный, я согласился бы даже на функцию, которая позволила бы, чтобы программа была открыта с Python в минимизированном состоянии, возможно, что-то вроде этого:

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

Кто-то предложил использовать win32com.client, но вещь состоит в том, что программе, которую я хочу запустить, не зарегистрировали сервер COM под именем.

Какие-либо идеи?

6
задан Mike Graham 23 February 2010 в 16:34
поделиться

3 ответа

Вы должны использовать win32api и скрыть окно, например используя win32gui.EnumWindows , вы можете перечислить все верхние окна и скрыть свое окно

Вот небольшой пример, вы можете сделать что-то вроде этого:

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."
7
ответ дан 8 December 2019 в 03:52
поделиться

Если отображается терминал, перенаправьте стандартный вывод процесса.

0
ответ дан 8 December 2019 в 03:52
поделиться

Какова цель?

если вы хотите, чтобы скрытый (без окна) процесс работал в фоновом режиме, лучшим способом было бы написать службу Windows и запускать / останавливать его с помощью обычного механизма оконного сервиса. Сервис Windows можно легко написать на Python, например. это часть моей собственной службы (она не будет работать без некоторых модификаций)

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 e.g. 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)

, и вы можете установить ее с помощью

python svc_jagteraho.py--startup auto install

и запустить до

python python svc_jagteraho.py start

. Я также буду отображаться в списке служб, например services.msc покажет его, и вы можете запустить / остановить его, иначе вы можете использовать командную строку

sc stop jagteraho
1
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: