吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13916|回复: 19
收起左侧

[原创工具] python实现获取屏幕坐标位置值+VBS模拟鼠标操作

  [复制链接]
yj1013 发表于 2019-6-13 10:34
本帖最后由 yj1013 于 2019-6-13 17:09 编辑

提供源码和程序

获取坐标以后,就可以用vbs代码自动操作一些程序,而vbs代码有个好处,就是Windows原生支持,不用装什么编译软件。
鼠标SetMouse类代码来自互联网,执行代码需要电脑安装有Excel。
vbs代码的SetMouse类也包含了获取当前鼠标坐标的过程。自己可以另外弄一个vbs脚本测试。但python更直观。
比方我们会碰到一些网络学院的课程学习,课时很长,有两三个小时的,中间隔10分钟左右就会跳出窗口让你确认,这个时候
就可以获取这个确认窗口的鼠标位置,然后用vbs代码发送一个回车。其他的代码大家自行去学习。我就提供下实现这种操作的代码吧。
代码复制到记事本,另存为后缀名为vbs的文件即可执行

[Shell] 纯文本查看 复制代码
Set ws = CreateObject("WScript.Shell")   '创建一个shell对象(ws.SendKeys "{Enter}"用这句的时候用,不然这句可以用单引号注释掉)
Set mouse = New SetMouse   '创建一个SetMouse的实例对象mouse
for i=1 to 10                '循环执行10次,根据需要设置
WScript.sleep 1000         '1000=1秒,如果10分钟可以写成60000*10,sleep即等待多少时间
mouse.move 800,600         '调用鼠标移动过程,鼠标移动到坐标(800,600)。根据需要修改
mouse.click "DBCLICK"     '调用鼠标点击过程,DBCLICK是执行左键双击,如果执行左键单击则用LEFT
                                          '回车可以使用ws.SendKeys "{Enter}"
next                 '进入下一次循环,直到i=10

'下面是一个鼠标SetMouse功能类
Class SetMouse
private S
private xls, wbk, module1
private reg_key, xls_code, x, y

'初始化的子过程-不可调用
Private Sub Class_Initialize()
Set xls = CreateObject("Excel.Application") 
Set S = CreateObject("wscript.Shell")
'vbs 完全控制excel
reg_key = "HKEY_CURRENT_USER\Software\Microsoft\Office\$\Excel\Security\AccessVBOM"
reg_key = Replace(reg_key, "$", xls.Version)
S.RegWrite reg_key, 1, "REG_DWORD"
'model 代码
xls_code = _
"Private Type POINTAPI : X As Long : Y As Long : End Type" & vbCrLf & _
"Private Declare Function SetCursorPos Lib ""user32"" (ByVal x As Long, ByVal y As Long) As Long" & vbCrLf & _
"Private Declare Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long" & vbCrLf & _
"Private Declare Sub mouse_event Lib ""user32"" Alias ""mouse_event"" " _
& "(ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)" & vbCrLf & _
"Public Function getx() As Long" & vbCrLf & _
"Dim pt As POINTAPI : GetCursorPos pt : getx = pt.X" & vbCrLf & _
"End Function" & vbCrLf & _
"Public Function gety() As Long" & vbCrLf & _
"Dim pt As POINTAPI: GetCursorPos pt : gety = pt.Y" & vbCrLf & _
"End Function"
Set wbk = xls.Workbooks.Add 
Set module1 = wbk.VBProject.VBComponents.Add(1)
module1.CodeModule.AddFromString xls_code 
End Sub
 
'关闭-不可调用过程
Private Sub Class_Terminate
xls.DisplayAlerts = False
wbk.Close
xls.Quit
End Sub
 
'获取鼠标当前坐标
Public Sub getpos( x, y) 
x = xls.Run("getx") 
y = xls.Run("gety") 
End Sub

'移动鼠标至新位置 
Public Sub move(x,y)
xls.Run "SetCursorPos", x, y
End Sub

'鼠标点击事件过程
Public Sub click(keydown)
Select Case UCase(keydown)
Case "LEFT"    '左键单击
xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
Case "RIGHT"  '右键单击
xls.Run "mouse_event", &H8 + &H10, 0, 0, 0, 0
Case "MIDDLE"  '中键单击
xls.Run "mouse_event", &H20 + &H40, 0, 0, 0, 0
Case "DBCLICK"  '左键双击
xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
xls.Run "mouse_event", &H2 + &H4, 0, 0, 0, 0
End Select
End Sub 

End Class

Mouse.rar (1.3 KB, 下载次数: 64)

1、命令行版
image.png
[Python] 纯文本查看 复制代码
#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import  os
import  time
import  pyautogui as pg
try:
    while True:
        print("按下组合键 {Ctrl}+C 结束执行\n")
        sW, sH = pg.size()  #获取屏幕的尺寸(像素)screenWidth,screenHeight
        print("屏幕分辨率:\n"+str(sW)+','+str(sH)+'\n')  #打印屏幕分辨率
        x,y = pg.position()   #获取当前鼠标的坐标(像素)
        print("鼠标坐标:\n" + str(x).rjust(4)+','+str(y).rjust(4)) #打印鼠标坐标值    
        time.sleep(1) #等待1秒
        os.system('cls')   #清屏
except KeyboardInterrupt:
    print('\n结束,按任意键退出....') #检测到Ctrl+c组合键结束运行

mouse.zip (583 Bytes, 下载次数: 64)
Windows下面可以直接运行的exe程序
下载:https://www.lanzouj.com/i4js4rc 密码:f3kt

2、窗口版
image.png
[Python] 纯文本查看 复制代码
#!/usr/bin/python3
# -*- coding: UTF-8 -*-

import time
import pyautogui as pag
import tkinter

def get():
    po.delete(0,tkinter.END)
    time.sleep(1) #几秒后返回位置
    x , y = pag.position()
    po.insert(0,str(x)+','+str(y))

win = tkinter.Tk()
win.title("鼠标坐标")
w = win.winfo_screenwidth()
h = win.winfo_screenheight()
win.geometry("%dx%d+%d+%d" %(180,80,(w-180)/2,(h-80)/2))#窗口居中、窗口大小180*80
tip = tkinter.Label(win,text="返回点击获取1秒后的光标位置")
tip.grid(row=0)
po = tkinter.Entry(win)
po.grid(row=1)
do = tkinter.Button(win,text="获取",command=get) #点击获取位置
do.grid(row=2)

win.mainloop()

mouse1.zip (579 Bytes, 下载次数: 51)

Windows下面可以直接运行的exe程序
下载:https://www.lanzouj.com/i4js54f 密码:a3xh

免费评分

参与人数 4吾爱币 +9 热心值 +3 收起 理由
我叫周奔跑 + 1 + 1 我很赞同!
hellozl + 1 我很赞同!
qn542231788 + 2 谢谢@Thanks!
云在天 + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| yj1013 发表于 2019-6-18 16:18

运行代码文件需要安装python3和pyautogui模块(命令行下pip install pyautogui)。exe文件如果不能执行,那现在还真不知道为何了。
 楼主| yj1013 发表于 2019-6-15 20:08
pheigo 发表于 2019-6-15 13:51
我32位操作系统不能运行????

32系统上没测试过,是哪个程序不能执行?
Light紫星 发表于 2019-6-13 10:58
wxfy115 发表于 2019-6-13 17:08
感谢分享原创作品,谢谢~!
htf 发表于 2019-6-13 22:17
经常见到的是命令行版,这次可见到python编写的窗口版程序了
psxrjdsd 发表于 2019-6-14 08:53
不错啊,感谢分享^_^
小马哥呗 发表于 2019-6-14 16:14

谢谢楼主分享。
头像被屏蔽
铁索横江 发表于 2019-6-15 09:13
提示: 作者被禁止或删除 内容自动屏蔽
yuriki2009 发表于 2019-6-15 09:25
原来还可以调用excel函数,学习到了
ridegod 发表于 2019-6-15 12:33
感谢分享
yox 发表于 2019-6-15 13:05
好傢伙.....
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表