34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
import win32gui
|
||
import win32process
|
||
import psutil
|
||
from .base import PlatformBase, WindowInfo
|
||
|
||
|
||
class WindowsPlatform(PlatformBase):
|
||
def get_active_window(self) -> WindowInfo:
|
||
try:
|
||
hwnd = win32gui.GetForegroundWindow()
|
||
if not hwnd:
|
||
return WindowInfo(title="", process_name="")
|
||
|
||
# Получаем заголовок окна
|
||
title = win32gui.GetWindowText(hwnd).strip()
|
||
|
||
# Получаем PID процесса
|
||
_, pid = win32process.GetWindowThreadProcessId(hwnd)
|
||
|
||
if pid == 0:
|
||
return WindowInfo(title=title, process_name="")
|
||
|
||
# Получаем имя исполняемого файла процесса
|
||
try:
|
||
process = psutil.Process(pid)
|
||
process_name = process.name()
|
||
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||
process_name = ""
|
||
|
||
return WindowInfo(title=title, process_name=process_name)
|
||
|
||
except Exception:
|
||
# В случае ошибки (например, недоступно окно) — возвращаем пустые данные
|
||
return WindowInfo(title="", process_name="") |