Home > database >  Starting external Program in Python and blocking it's window to prevent focuschange
Starting external Program in Python and blocking it's window to prevent focuschange

Time:02-21

after searching for a long time I don't a working solution. Here is my script:

import psutil
import time
import subprocess
import json
import requests
from datetime import datetime
from influxdb import InfluxDBClient

CLIENT = InfluxDBClient("grafana.i.3fu.de", "8086", "grafana", "test", "firewall")
MEASUREMENT = "arbeitspc"
REMOTE_EXE = "C:\\Users\\Gamienator\\AppData\\Roaming\\RemoteSensorMonitoring\\Remote Sensor Monitor.exe"

def checkIfProcessRunning(processName):
    '''
    Check if there is any running process that contains the given name processName.
    '''
    #Iterate over the all the running process
    for proc in psutil.process_iter():
        try:
            # Check if process name contains the given name string.
            if processName.lower() in proc.name().lower():
                return True
        except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
            pass
    return False

def findProcessIdByName(processName):
    '''
    Get a list of all the PIDs of a all the running process whose name contains
    the given string processName
    '''

    listOfProcessObjects = []

    #Iterate over the all the running process
    for proc in psutil.process_iter():
       try:
           pinfo = proc.as_dict(attrs=['pid', 'name', 'create_time'])
           # Check if process name contains the given name string.
           if processName.lower() in pinfo['name'].lower() :
               listOfProcessObjects.append(pinfo)
       except (psutil.NoSuchProcess, psutil.AccessDenied , psutil.ZombieProcess) :
           pass

    return listOfProcessObjects

def startProgram():
    SW_HIDE = 0
    info = subprocess.STARTUPINFO()
    info.dwFlags = subprocess.STARTF_USESHOWWINDOW
    info.wShowWindow = SW_HIDE
    exe = [REMOTE_EXE, "--gpuz=0", "--aida64=0", "--ohm=0"]
    subprocess.Popen(exe, startupinfo=info)
   

def sendToInflux():
    NOW = datetime.now()
    hwinfodata = requests.get('http://localhost:55555')
    data = hwinfodata.json()
    summarized = {}
    for d in data:
        name = "{}__{}".format(d['SensorClass'], d['SensorName']).replace(" ", "_")
        summarized[name]=d['SensorValue']

    json_body=[
        {
            "measurement": MEASUREMENT,
            "time": NOW,
            "fields" : summarized
        }
    ]
    CLIENT.write_points(json_body)


def main():
    startProgram()
    time.sleep(10)

    # Find PIDs od all the running instances of process that contains 'chrome' in it's name
    listOfProcessIds = findProcessIdByName('Remote Sensor Monitor.exe')

    if len(listOfProcessIds) > 0:
       #print('Process Exists | PID and other details are')
       for elem in listOfProcessIds:
           processID = elem['pid']
           sendToInflux()
           #print((processID ,processName,processCreationTime ))
           process = psutil.Process(processID)
           process.terminate()
    else :
       print('No Running Process found with given text')

if __name__ == '__main__':
   main()

My Goal is to push my HWInfo stats into an Grafana Board that I can look up on an different screen (a Raspberry Pi) Stats like FPS, Temps etc. The way I foudn out is, enabled HWinfo and starting Remote Sensor Monitor.exe enter image description here

This Python script will run every minute in the background, but as soon as it starts, my game for example gets minimized because the exe was started. Is there a way to that it over Python without showing the windows?

CodePudding user response:

To make my comment an answer:

On Windows, you can use pythonw.exe (or rename your Python script to something.pyw) to start the Python interpreter without a console window.

  • Related