Credits to SpyDrone: reverted the intervals between cover launch and minimizing from 0.1 seconds to 0.5 seconds to allow system to finish minimizing
165 lines
5.5 KiB
Python
165 lines
5.5 KiB
Python
import threading
|
|
import time
|
|
from watchfiles import watch
|
|
import pygetwindow as gw
|
|
import pyautogui
|
|
import subprocess
|
|
from termcolor import colored
|
|
|
|
# ---------- CONFIGURATION ---------- #
|
|
monitor_path = r"C:\Program Files\Renato Software\Senso.Cloud.Client" # Path to be monitored
|
|
|
|
# ---------- DON'T TOUCH ---------- #
|
|
program = "" # 0 is use path, -1 is use name, 1-4 is programs
|
|
p_name = ""
|
|
p_path = "" # used only if program = 0.
|
|
|
|
# ---------- BRING TO FRONT ---------- #
|
|
def bring_to_front(window_title):
|
|
time.sleep(0.5)
|
|
try:
|
|
print("Bringing to front...", end = " ")
|
|
windows = gw.getWindowsWithTitle(window_title)
|
|
if windows:
|
|
window = windows[0]
|
|
window.restore()
|
|
window.activate()
|
|
print("Window has been brought to front.")
|
|
else:
|
|
print(colored("ERROR: Window not found", 'red'))
|
|
except Exception as e:
|
|
print(colored(f"Error: {e}", 'red'))
|
|
|
|
# ---------- FILE WATCHER ---------- #
|
|
def file_watch():
|
|
print("=" * 80)
|
|
print("Monitoring changes in " + monitor_path + ".")
|
|
print("-" * 80)
|
|
try:
|
|
for changes in watch(monitor_path):
|
|
for change_type, path in changes:
|
|
print(f"Change type: {change_type}, Path: {path}")
|
|
return True
|
|
except Exception as e:
|
|
print(colored(f"File Watch Error: {e}", 'red'))
|
|
|
|
# ---------- MINIMIZE ---------- #
|
|
def minimize():
|
|
print("=" * 80)
|
|
print("Minimizing all windows...", end = " ")
|
|
pyautogui.hotkey('win', 'd')
|
|
print("Completed.")
|
|
|
|
# ---------- LAUNCH COVER PROGRAM ---------- #
|
|
def launch_cover(programs):
|
|
time.sleep(0.5)
|
|
print("=" * 80)
|
|
print("Launching cover application...", end = " ")
|
|
if programs == "1": # Chrome
|
|
try:
|
|
subprocess.run(
|
|
["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"]
|
|
)
|
|
print("Launched Chrome.")
|
|
except Exception as e:
|
|
print(colored(f"Chrome Launch Error: {e}", 'red'))
|
|
|
|
elif programs == "2": # Edge
|
|
try:
|
|
subprocess.run(
|
|
["C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"]
|
|
)
|
|
print("Launched Edge.")
|
|
except Exception as e:
|
|
print(colored(f"Edge Launch Error: {e}", 'red'))
|
|
|
|
elif programs == "3": # Adobe Illustrator
|
|
try:
|
|
subprocess.run(
|
|
["C:\\Program Files\\Adobe\\Adobe Illustrator 2025\\Support Files\\Contents\\Windows\\Illustrator.exe"]
|
|
)
|
|
print("Launched Illustrator.")
|
|
except Exception as e:
|
|
print(colored(f"Illustrator Launch Error: {e}", 'red'))
|
|
|
|
elif programs == "4": # Onenote
|
|
try:
|
|
subprocess.run(
|
|
["C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\ONENOTE.EXE"]
|
|
)
|
|
print("Launched OneNote.")
|
|
except Exception as e:
|
|
print(colored(f"OneNote Launch Error: {e}", 'red'))
|
|
|
|
else:
|
|
print(colored("Error: Invalid Cover App Specified.", 'red'))
|
|
|
|
# ---------- LAUNCH COVER PROGRAM PATH ---------- #
|
|
def launch_cover_path(path):
|
|
print("Launching custom path...", end = " ")
|
|
time.sleep(0.5)
|
|
subprocess.run(
|
|
[path]
|
|
)
|
|
print("Launched custom path.")
|
|
|
|
# ---------- Main Process ---------- #
|
|
def main():
|
|
global p_name, p_path
|
|
|
|
print("=" * 80)
|
|
print("Interceptor APS (Active Protection System)")
|
|
print("-" * 80)
|
|
print("Choose a cover app to open:")
|
|
print("[1] Chrome (empty)")
|
|
print("[2] Edge (empty)")
|
|
print("[3] Adobe Illustrator (predetermined)")
|
|
print("[4] Onenote (Identical)")
|
|
print("[5] Enter a path (Not recommended)")
|
|
print("[6] It has a name (NOTE)", end = "\n\n")
|
|
print("- Empty: window opens empty")
|
|
print("- Predetermined: window opens with whatever was on it.")
|
|
print(" * Requires having it open in the first place")
|
|
print("- Identical: a NEW window opens with what you had earlier/what you have now.")
|
|
print("- Not recommended: Only use this if you know what you're doing.")
|
|
print(" * If you get the path wrong, the program will fail you at the most critical moment.")
|
|
print("- NOTE: Probably the best way by far.")
|
|
print(" * Type the name of the window (partial names work, like note for OneNote) and it will pop up.")
|
|
program = input("Enter your option > ")
|
|
|
|
if program == "5": # If path is selected (I doubt that)
|
|
p_path = input("Enter full path > ")
|
|
program = "0" # Indicate that the path option is selected
|
|
elif program == "6": # If name is chosen
|
|
program = "-1" # Indicate that the name option is selected
|
|
p_name = input("Name > ")
|
|
else:
|
|
pass # All other options, if selected, are already stored in program by this time
|
|
|
|
# Begin the watching process.
|
|
try:
|
|
watchresults = file_watch()
|
|
except KeyboardInterrupt:
|
|
print("Canceled by user.")
|
|
sys.exit(0)
|
|
|
|
# If it advances to below then there must have been a file change. (VERIFY)
|
|
if program == "0": # If we chose path
|
|
minimize()
|
|
launch_cover_path(p_path) # VERIFY IF DOUBLE ESCAPES ARE NEEDED WHEN PATH IS FIRST ENTERED BY USER
|
|
elif program == "-1": # If we chose name
|
|
minimize()
|
|
bring_to_front(p_name)
|
|
else:
|
|
minimize()
|
|
launch_cover(program) # Other options must be string numbers 1-4
|
|
|
|
|
|
# ---------- Running the code ---------- #
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
|
|
|
|
|