log2ml/3-2-test-corpus-initial-access-mw-and-3-3-simulator/Simulator/simulator.py

81 lines
2.8 KiB
Python
Raw Permalink Normal View History

import os
import sys
import time
import pyautogui
2024-07-29 08:29:15 +00:00
import win32gui
import win32con
def close_cmd_window():
def enum_windows_callback(hwnd, result):
window_title = win32gui.GetWindowText(hwnd).lower()
if (win32gui.IsWindowVisible(hwnd) and
'cmd.exe' in window_title and
'Anaconda' not in window_title):
win32gui.PostMessage(hwnd, win32con.WM_CLOSE, 0, 0)
win32gui.EnumWindows(enum_windows_callback, None)
def close_excel_without_saving():
pyautogui.hotkey('alt', 'f4')
time.sleep(1)
# Try to locate and click the "Don't Save" button
try:
dont_save_button = pyautogui.locateOnScreen('dont_save_button.png', confidence=0.8)
if dont_save_button:
pyautogui.click(dont_save_button)
print("Clicked 'Don't Save' button")
else:
print("Save dialogue not found, Excel may have closed without prompting")
except pyautogui.ImageNotFoundException:
print("Save dialogue not found, Excel may have closed without prompting")
def open_excel_with_macros(file_path):
# Get the directory of the current script/executable
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
enable_button_image = os.path.join(base_path, 'enable_content.png')
# Open Excel through the OS start menu or command line
os.startfile(file_path)
time.sleep(5) # Wait for Excel to open
# Custom timeout mechanism to locate the 'Enable Content' button
timeout = 10 # 10 seconds timeout
start_time = time.time()
enable_button = None
while (time.time() - start_time) < timeout:
2024-07-29 08:29:15 +00:00
try:
enable_button = pyautogui.locateCenterOnScreen(enable_button_image, confidence=0.8)
if enable_button:
pyautogui.click(enable_button)
break
except pyautogui.ImageNotFoundException:
pass
time.sleep(1) # Check every 1 second
if not enable_button:
print("Enable Content button not found, continuing...")
# Wait for any macros to finish running or other processing
time.sleep(10) # Adjust time based on expected macro execution time
# Close Excel without saving
2024-07-29 08:29:15 +00:00
close_excel_without_saving()
# Close any cmd.exe windows that might have opened, except Anaconda prompt
close_cmd_window()
def main():
2024-07-29 08:29:15 +00:00
directory = r'C:\Users\student\Desktop\Corpus' # Adjust the path to your files
files = os.listdir(directory)
excel_files = [file for file in files if file.endswith(('.xlsx', '.xlsm'))]
for file in excel_files:
full_path = os.path.join(directory, file)
open_excel_with_macros(full_path)
time.sleep(5) # Adjust as needed between openings
if __name__ == '__main__':
main()