📅  最后修改于: 2023-12-03 15:04:18.456000             🧑  作者: Mango
在某些应用程序或爬虫中,我们可能需要获取当前用户正在使用的窗口,以便执行某些操作。Python为我们提供了许多库和方法来获取当前窗口。
WMI(Windows Management Instrumentation)是在Windows上操作系统管理的API,可以通过Python WMI库来获取当前焦点窗口的句柄。下面是相关代码:
import win32gui
import win32process
import win32com.client
wmi = win32com.client.GetObject('winmgmts:')
focused_window = wmi.ExecQuery('SELECT * FROM Win32_Process WHERE Handle=\'' + str(win32gui.GetForegroundWindow()) + '\'')
pid = focused_window[0].Properties_('ProcessId').Value
print(win32process.GetModuleFileNameEx(win32process.OpenProcess(0x0400 | 0x0010, False, pid), 0))
**注意:**需要先安装pywin32
库,执行pip install pywin32
即可。
代码解释:
win32gui
库获取当前窗口的句柄。win32com.client
库获取WMI接口。win32process
库获取当前进程的模块名。ctypes
库提供了一种获取当前窗口句柄的简单方法。下面是相关代码:
import ctypes
foreground_window = ctypes.windll.user32.GetForegroundWindow()
window_title_length = ctypes.windll.user32.GetWindowTextLengthW(foreground_window)
window_title = ctypes.create_unicode_buffer(window_title_length+1)
ctypes.windll.user32.GetWindowTextW(foreground_window, window_title, window_title_length+1)
print(window_title.value)
代码解释:
ctypes.windll.user32.GetForegroundWindow()
获取当前焦点窗口句柄。ctypes.windll.user32.GetWindowTextLengthW()
获取当前窗口标题长度。ctypes.create_unicode_buffer()
创建窗口标题缓冲区。ctypes.windll.user32.GetWindowTextW()
获取当前窗口标题。**注意:**需注意窗口标题可能无法获取,需要异常处理。
win32gui
库提供了一种获取当前窗口句柄和进程ID的方法。下面是相关代码:
import win32gui
import win32process
window = win32gui.GetForegroundWindow()
pid = win32process.GetWindowThreadProcessId(window)[1]
print(pid)
代码解释:
win32gui.GetForegroundWindow()
获取当前焦点窗口句柄。win32process.GetWindowThreadProcessId()
获取当前窗口进程ID。以上是三种获取当前窗口的方法,每种方法都有其优缺点,应根据具体需求来选择。需要注意的是,获取窗口的API只适用于Windows操作系统。