当前位置: 首页 > 面试题库 >

python win32模拟点击

孟华晖
2023-03-14
问题内容

假设我有一个要模拟特定x,y坐标处的鼠标单击的窗口。我已经有了hwnd,但不确定如何构造lParam。我过去曾使用过SendMessage来单击按钮等,但是我知道他们的名字。任何帮助将不胜感激。我也忍不住想知道我是否正在以正确的方式进行操作。我的最终目标是在Skype主窗口上单击某个用户(例如)。我使用EnumChildWindows查找主窗口的所有子级,但找不到正确的子级。所以想通了,我将尝试使用坐标“单击”它。


问题答案:

由于ctypes,您可以使用低级Windows API。请参见下面的示例(改编自我未测试过的内容,但应该可以)

import ctypes
MOUSEEVENTF_MOVE = 0x0001 # mouse move
MOUSEEVENTF_ABSOLUTE = 0x8000 # absolute move
MOUSEEVENTF_MOVEABS = MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE

MOUSEEVENTF_LEFTDOWN = 0x0002 # left button down 
MOUSEEVENTF_LEFTUP = 0x0004 # left button up 
MOUSEEVENTF_CLICK = MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP

def click(x, y):
    #move first
    x = 65536L * x / ctypes.windll.user32.GetSystemMetrics(0) + 1
    y = 65536L * y / ctypes.windll.user32.GetSystemMetrics(1) + 1
    ctypes.windll.user32.mouse_event(MOUSEEVENTF_MOVEABS, x, y, 0, 0)

    #then click
    ctypes.windll.user32.mouse_event(MOUSEEVENTF_CLICK, 0, 0, 0, 0)

更新:我没有测试下面的代码,但我认为它应该可以帮助您编写一些内容来获得孩子的位置。然后,您可以尝试单击正确的位置。

CHILD= None

def the_callback(child_hwnd, regex):
    '''Pass to win32gui.EnumWindows() to check all the opened windows'''
    if re.match(regex, win32gui.GetWindowText(child_hwnd)):
        CHILD= child_hwnd

win32gui.EnumChildWindows(hwnd, the_callback, regex)


if CHILD:
    (x_tl, y_tl, x_br, y_br) = win32gui.GetWindowRect(CHILD)


 类似资料:
  • 问题内容: 我只是想知道如何使用JavaScript模拟元素的点击。 目前我有: 但这不起作用:( 有任何想法吗? 问题答案: 这是我煮的 这很简单,但是有效: 用法:

  • 问题内容: 我正在使用Selenium编写一些UI测试,并且使用Dojo工具箱具有一个JavaScript Tree控件。 我已经使用Dojo提供的示例为树的每个节点实现了一个上下文菜单,但是我需要Selenium测试来“调用”树节点上的右键,但是我无法使其正常工作。这些测试根本不会通过JavaScript模拟右键单击事件,并且不会显示上下文菜单。 是否有人在使用Dojo和Selenium调用上下

  • 问题内容: 我目前正在使我的Nintendo Wiimote(实际上是Kinda难过)可以像鼠标一样在计算机上工作。我设法使双节棍的摇杆控件实际上在屏幕上左右移动鼠标!真是令人兴奋。现在我被卡住了。 我想在按A时通过python左/右键单击事物,当我去做搜索时,想到的只是tkinter吗? 所以我的问题是,我该怎么称呼以使python在桌面上左/右单击,并且如果可能的话,也许提供一个代码段? 感谢

  • 我试图模拟一个外部模块(jwt_decode),对于感兴趣的人来说,我已经看到了许多如何使用Jest模拟外部节点模块的示例,无论是在测试套件中的所有测试,还是在每个测试的基础上。 我已经能够模拟依赖项,以便它模拟套件中所有测试的返回值,尽管缺省函数是我真正关心的全部。 这工作得很好,只是我想测试一个返回的令牌已经过期的场景,这样我就可以验证在出现这种情况时是否调度了某些Redux操作。 我想修改单

  • 问题内容: 我想模拟对锚标签的点击,并带有所有类似正确目标处理之类的功能。 锚点的DOM对象似乎有一个[[click()] [3]“方法,但并非所有浏览器都支持。Firefox抛出此错误: 错误:anchorObj.click不是函数 它在Opera 10和Konqueror上也很奇怪,当在周围div的onclick处理函数中调用它时,会导致无限点击。我猜只有IE8可以正常工作。无论如何,我都不想

  • 问题内容: 我在通过jQuery伪造锚点单击时遇到问题:为什么我的thickbox第一次单击输入按钮时出现,但第二次或第三次却没有出现? 这是我的代码: 当我直接单击链接时,它总是起作用,但是如果我尝试通过输入按钮激活thickbox,则它不会起作用。这是在FF。对于Chrome,它似乎每次都能正常工作。有什么提示吗? 尽量避免内联这样的jQuery调用。将脚本标签放在页面顶部以绑定到事件: 编辑