通过标题 找到 指定句柄下 子窗口或 孙窗口 范围其 句柄和 屏幕位置 并点击 其中心点
时间: 2024-03-16 17:42:09 浏览: 21
可以使用Python `win32gui`模块的 `FindWindow`, `FindWindowEx`, `GetWindowRect`和 `SetCursorPos`函数来实现。
以下是一个例子:
```python
import win32api
import win32gui
# 获取主窗口句柄
handle = win32gui.FindWindow(None, "窗口标题")
# 获取子窗口或孙窗口句柄
child_handle = win32gui.FindWindowEx(handle, None, "子窗口类名", "子窗口标题")
# 获取句柄的屏幕位置
rect = win32gui.GetWindowRect(child_handle)
x = rect[0] + (rect[2] - rect[0]) // 2
y = rect[1] + (rect[3] - rect[1]) // 2
# 点击中心点
win32api.SetCursorPos((x, y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
```
请注意,您需要将窗口标题,子窗口类名和子窗口标题替换为实际的值。如果窗口没有子窗口,`FindWindowEx`函数将返回`None`。
相关问题
python 通过 标题 找到 指定句柄下 符合标题的 窗口 返回 其句柄和屏幕位置 类名 并点击其中心点
可以使用 pywin32 库来实现这个功能。
首先,需要使用 `win32gui.EnumWindows` 枚举所有窗口,找到指定句柄下的窗口。可以使用 `win32gui.GetWindowText` 和 `win32gui.GetClassName` 函数获取窗口的标题和类名。
接着,需要在找到的窗口中查找符合标题的子窗口。可以使用 `win32gui.FindWindowEx` 函数来查找子窗口。
最后,可以使用 `win32gui.GetWindowRect` 函数获取窗口的屏幕位置,计算出其中心点,并使用 `win32api.SetCursorPos` 函数将鼠标移动到其中心点,再使用 `win32api.mouse_event` 函数模拟鼠标点击。
以下是示例代码:
```python
import win32api
import win32con
import win32gui
def find_window_by_title(handle, title):
def callback(hwnd, hwnds):
if win32gui.IsWindowVisible(hwnd) and title in win32gui.GetWindowText(hwnd):
hwnds.append(hwnd)
return True
hwnds = []
win32gui.EnumChildWindows(handle, callback, hwnds)
return hwnds[0] if hwnds else None
def click_window_center(hwnd):
x1, y1, x2, y2 = win32gui.GetWindowRect(hwnd)
x = (x1 + x2) // 2
y = (y1 + y2) // 2
win32api.SetCursorPos((x, y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
# 查找指定句柄下符合标题的窗口
handle = 123456 # 指定句柄
title = "窗口标题"
hwnd = find_window_by_title(handle, title)
if hwnd:
# 获取窗口类名
class_name = win32gui.GetClassName(hwnd)
# 获取窗口屏幕位置并点击其中心点
click_window_center(hwnd)
x1, y1, x2, y2 = win32gui.GetWindowRect(hwnd)
print(f"句柄:{hwnd},类名:{class_name},位置:({x1}, {y1})-({x2}, {y2})")
else:
print("未找到符合条件的窗口")
```
注意:以上代码仅供参考,具体实现要根据实际情况进行调整。
python 遍历指定句柄窗口所有 子窗口和 孙窗口 有符合 标题的 返回其 句柄 和 屏幕位置
可以使用win32gui模块来实现,具体步骤如下:
1. 导入win32gui模块和win32con模块
```python
import win32gui
import win32con
```
2. 定义一个回调函数用来获取所有窗口的句柄和标题
```python
def find_window_handle(handle_list, title):
def callback(handle, extra):
if win32gui.IsWindowVisible(handle) and title in win32gui.GetWindowText(handle):
handle_list.append(handle)
return True
return callback
```
3. 定义一个函数来遍历指定窗口的所有子窗口和孙窗口,并返回符合条件的窗口句柄和屏幕位置
```python
def find_window_pos(hwnd, title):
handle_list = []
win32gui.EnumChildWindows(hwnd, find_window_handle(handle_list, title), None)
for handle in handle_list:
rect = win32gui.GetWindowRect(handle)
print("窗口标题:", win32gui.GetWindowText(handle))
print("窗口句柄:", handle)
print("屏幕位置:", rect)
```
4. 调用find_window_pos函数来遍历指定窗口的所有子窗口和孙窗口,并返回符合条件的窗口句柄和屏幕位置
```python
# 获取指定窗口的句柄
hwnd = win32gui.FindWindow(None, "窗口标题")
# 遍历指定窗口的所有子窗口和孙窗口,并返回符合条件的窗口句柄和屏幕位置
find_window_pos(hwnd, "要查找的窗口标题")
```
注意,find_window_pos函数中的title参数是用来筛选符合条件的窗口的,可以根据实际情况修改。