Python win32 使用方式

Python win32 使用方式,第1张

handle = win32guiFindWindow('Galaxy2DEngine',None)

left, top, right, bottom = win32guiGetWindowRect(handle)

win32guiMoveWindow(handle, int x, int y, int w,int h,BOOL bRepaint )

pos = win32guiGetCursorPos()

win32apiSetCursorPos([x, y])

title = win32guiGetWindowText(handle)

clsname = win32guiGetClassName(handle)

win32apimouse_event(win32conMOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

win32apimouse_event(win32conMOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

win32apimouse_event(win32conMOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)

win32apimouse_event(win32conMOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)

def click_it(self,x,y):

#设置鼠标位置

win32apiSetCursorPos([x, y])

#获取鼠标位置

pos = win32apiGetCursorPos()

#通过鼠标位置获取窗体句柄

handle= win32guiWindowFromPoint(pos)

#通过窗体名称获取窗体句柄(可通过spy++获取)

#handle = win32guiFindWindow('Galaxy2DEngine',None)

#获取Title & ClassName

title = win32guiGetWindowText(handle)

clsname = win32guiGetClassName(handle)

#把在屏幕上鼠标的位置转换为打开的程序的客户区的坐标

client_pos =win32guiScreenToClient(handle,pos)

tmp=win32apiMAKELONG(client_pos[0],client_pos[1])

#发送激活窗口消息 并发送鼠标按下-抬起消息,依赖具体的窗体(handle),窗体内位置(tmp)

win32guiSendMessage(handle, win32conWM_ACTIVATE,win32conWA_ACTIVE,0)

win32guiSendMessage(handle, win32conWM_LBUTTONDOWN,win32conMK_LBUTTON,tmp)

win32guiSendMessage(handle, win32conWM_LBUTTONUP,win32conMK_LBUTTON,tmp)

#win32guiSendMessage(handle, win32conWM_RBUTTONDOWN,win32conMK_LBUTTON,tmp)

#win32guiSendMessage(handle, win32conWM_RBUTTONUP,win32conMK_LBUTTON,tmp)

1 获取到当前窗口的句柄。可以使用GetForegroundWindow()函数来实现。

2 获取到当前窗口的坐标位置。可以使用GetWindowRect()函数来实现。此处不仅需要当前窗口的句柄,也需要我们定义一个结构体来实现坐标值得存储。

3 改变当前窗口的位置。可以使用SetWindowPos()函数来实现。函数原型为BOOL SetWindowPos(HWN hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags),其中hWnd为窗口的句柄,hWndInsertAfter指在z序中的位于被置位的窗口前的窗口句柄,X指以客户坐标指定窗口新位置的左边界,Y指以客户坐标指定窗口新位置的顶边界,cx指以像素指定窗口的新的宽度,cy指以像素指定窗口的新的高度,uFlags:窗口尺寸和定位的标志。

用python的sendkeys直接模拟键盘,用ctype扩展来点鼠标。你需要做的就是用python打开浏览器,然后输入网站,在找到按钮的坐标(固定到程序里),然后点击就行了。不过简单的可以,复杂点的就要考虑很多问题了,程序截图如下:

给你一个思路。用 python 的 win32gui 可以枚举所有窗口句柄,想办法获取窗口句柄,然后通过 GetWindowText() 方法来获取窗口的标题,也就是结果所在的窗口句柄。

我用WIN32试了一下,我是hook了鼠标所在的句柄,但当鼠标指向结果时,结果的窗口句柄获取不到,只能获取到结果窗口的上一个窗口的句柄(也就是你图中的00280756的句柄),但可以通过枚举子窗口来获取(也就是枚举你中的002F0854句柄),然后经过一系列匹配和判断最终得到结果的值。

# encoding: gb2312

import win32gui

def _MyCallback( hwnd, extra ):

    hwnds = extra

    hwndsappend(hwnd)

def _CallBack(hwnd, extra):

    value, m_index = extra

    if win32guiGetClassName(hwnd) == 'Static':

        m_indexappend(None)

    

    if len(m_index) == 4:

        valueappend(win32guiGetWindowText(hwnd))

def TestEnumWindows():

    windows = []

    results = []

    win32guiEnumWindows(_MyCallback, (windows))

    i = 0

    for hwnd in windows:

        if win32guiGetClassName(hwnd) == 'CalcFrame':

            m_index = []

            win32guiEnumChildWindows(hwnd, _CallBack, (results, m_index))

        i += 1

    for result in results:

        print '计算器的结果为:' , result

TestEnumWindows()

这样更好一些,可能有些特征不同。我是枚举所有窗口,然后获取窗口的classname为CalcFrame的窗口,然后再枚举CalcFrame的子窗口,然后判断第4个出现的Static控件就是结果的控件。

绑定窗口:BindWindow() 这个函数可以设置键盘、鼠标是否后台。但是需要传入句柄

获取句柄:FindWindow() 查找符合类名或者标题名的顶层可见窗口。类似的函数还有几个可以自己看看

顺带一提,如果是网页游戏,浏览器不在顶层的时候会找不到具体网页的句柄

所以我找了个能勉强用的方法:把浏览器置顶,然后移到屏幕之外。

python在读取文件的时候是根据光标位置来读取的。读一行以后光标位置到了下一行。再来个read又到了下一行。

想要重新从头开始读的话用fseek(0)

将光标位置放到最前面。这样再fread()就是第一行的内容

还有个方法是ftell()

告诉你当前光标的位置。你可以把文件都读完了以后ftell()一下看看光标位置

然后再fseek(0)

再ftell()一下看看光标位置

with open() as f跟你截图用的差不多,只不过这种方式不用fclose(),会自动关闭文件句柄。不过也可以手动关闭文件句柄

以上就是关于Python win32 使用方式全部的内容,包括:Python win32 使用方式、如何用Python实现窗口抖动、python根据句柄如何自动点击按钮等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10152761.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存