可以通过进程句柄获取窗口句柄,以下是基本的实现方法:
- 获取进程句柄 使用
win32api
模块的OpenProcess
函数获取进程句柄。例如:
import win32api import win32con process_name = "notepad.exe" process_id = win32api.GetProcessesByName(process_name)[0].pid process_handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, process_id)
需要注意的是,需要先获取进程 ID,然后通过进程 ID 获取进程句柄。
2. 枚举窗口 使用 win32gui
模块的 EnumWindows
函数枚举窗口,并使用回调函数判断窗口是否属于指定进程。例如:
import win32gui def callback(hwnd, hwnd_list): # 判断窗口是否属于指定进程 if win32gui.GetWindowThreadProcessId(hwnd)[1] == process_id: # 将窗口句柄添加到列表中 hwnd_list.append(hwnd) hwnd_list = [] win32gui.EnumWindows(callback, hwnd_list)
其中,GetWindowThreadProcessId
函数可以获取窗口所属的进程 ID,判断是否属于指定进程。
3. 关闭进程句柄 使用 win32api
模块的 CloseHandle
函数关闭进程句柄。例如:
win32api.CloseHandle(process_handle)
以上是基本的实现方法,需要注意的是,如果在回调函数中修改全局变量,需要使用 global
关键字声明。例如:
import win32gui hwnd_list = [] def callback(hwnd, param): global hwnd_list # 判断窗口是否属于指定进程 if win32gui.GetWindowThreadProcessId(hwnd)[1] == process_id: # 将窗口句柄添加到列表中 hwnd_list.append(hwnd) win32gui.EnumWindows(callback, None)
在使用 OpenProcess
函数时,可以根据需要设置访问权限;在使用 EnumWindows
函数时,需要注意回调函数的实现方式。
评论