阿雪的学习记录|Python写个点击器及grab()截图不全解决办法

因为菜的调不出软件的界面控制端口,或者说真的有这种东西嘛!一直找不到……只能用sdk但是sdk没办法输出图形界面能输出的那种文件,要不就是我太菜了所以不会输出,所以做了个点击器……虽然做了出来但是不知道为什么我想控制的软件依然没办法点击,电脑上其他软件和程序都可以点,就这个点不动

为你弹奏python的夜曲,纪念我死去的激情……

from time import sleep
import time
import pyautogui
from PIL import ImageGrab, Image
import pyscreeze
import cv2
import matplotlib.pyplot as plt 
import numpy as np

# 屏幕缩放系数 mac缩放是2 windows一般是1
screenScale=1

#事先读取按钮截图
target= cv2.imread(r"C:\Users\xxx\Desktop\python\11.png",cv2.IMREAD_COLOR)

img = ImageGrab.grab()

img.save('my_screenshot.png')

# 读取图片
temp = cv2.imread(r'my_screenshot.png',cv2.IMREAD_COLOR)

theight, twidth = target.shape[:2]
tempheight, tempwidth = temp.shape[:2]
print("目标图宽高:"+str(twidth)+"-"+str(theight))
print("模板图宽高:"+str(tempwidth)+"-"+str(tempheight))
# 先缩放屏幕截图 INTER_LINEAR INTER_AREA
scaleTemp=cv2.resize(temp, (int(tempwidth / screenScale), int(tempheight / screenScale)))
stempheight, stempwidth = scaleTemp.shape[:2]
print("缩放后模板图宽高:"+str(stempwidth)+"-"+str(stempheight))
# 匹配图片
res = cv2.matchTemplate(scaleTemp, target, cv2.TM_CCOEFF_NORMED)
mn_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
if(max_val>=0.8):
	# 计算出中心点
    top_left = max_loc
    bottom_right = (top_left[0] + twidth, top_left[1] + theight)
    tagHalfW=int(twidth/2)
    tagHalfH=int(theight/2)
    tagCenterX=top_left[0]+tagHalfW
    tagCenterY=top_left[1]+tagHalfH
    #左键点击屏幕上的这个位置
    pyautogui.click(tagCenterX,tagCenterY,button='left')
    time.sleep(3)	#睡了三秒
    #双击,这是我最后的倔强,然鹅我想控制的界面双击也点不动,毁灭吧
    #还有其他的鼠标响应功能,可以去pyautogui的官方网站自查,四级不过也看得懂
    pyautogui.doubleClick(tagCenterX,tagCenterY,button='left')
else:
    print ("没找到")

在运行这个程序的时候出现了一个问题,就是在img = ImageGrab.grab()这条代码运行之后,按理说会截取整个电脑的屏幕,然而截出来的图片是一部分屏幕,但是它目标按钮识别匹配是没问题的,鼠标也确实移动了,移动到的位置虽然在自己屏幕上看是错的,但是按照它截的屏幕图来看,就是对的,查了很多资料,有说现在电脑显示比例自动是150%,改成100%就可以,可是100%的话根本看不清,而且好像还是截出来不全的图?
最后找到了这个方法,来源我忘了等找到就补上,python运行以下代码:

from PIL import ImageGrab
import winreg

reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER)
key = winreg.OpenKey(reg, r'Control Panel\Desktop\WindowMetrics')
# print(winreg.QueryValueEx(key, 'AppliedDPI'))
if winreg.QueryValueEx(key, 'AppliedDPI')[0] != 96:
    key.Close()
    key = winreg.OpenKey(reg, r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers', 0, winreg.KEY_ALL_ACCESS)
#前面的两个地址都不用改,下面这两个地址改成自己对应的python.exe和pythonw.exe的地址就行了
    winreg.SetValueEx(key, r'C:\software\Anaconda3\pythonw.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
    winreg.SetValueEx(key, r'C:\software\Anaconda3\python.exe', 0, winreg.REG_SZ, 'HIGHDPIAWARE')
key.Close()
reg.Close()

#下面这三行就是截图然后保存,不写也行,反正上面就是配置注册表的代码,程序一键配置美吱吱
pic = ImageGrab.grab()
# print(pic.size)
pic.save(r'C:\Users\xxx\Desktop\pic.jpg')

就在IDE里运行就行,不返回错误就是配置成功了,再grab就是完整的屏幕了

对了,点击器在运行的时候,目标按钮,也就是我第一块代码里的11.png这个图需要是原大小,可以ctrl+prtsc之后粘贴到word里,然后把需要的按钮部分裁剪出来,这个时候需要注意粘贴到word里的截图是有缩放比例的,裁剪完之后把比例改成100%,再把这图另存到路径里就能用了。
就很讨厌,我电脑上所有软件都能控制,就只有我想控制的不能!我甚至可以用这个再多写两行条件语句自动玩4399小游戏……我不理解,intel怎么回事,你们的界面完全没有开放接口的嘛必须要真实的鼠标点击才能响应嘛甚至连键盘快捷键都没有,难道是用鼠标的弹簧来控制按钮的吗!骂骂咧咧走了

每天学一点点,就能少菜一点点,加油( •̀ ω •́ )y

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,你可以使用scatter函数来绘制散点图,使用convhulln函数来计算凸包的坐标,然后使用patch函数将坐标点连接成面,形成包络图。下面是一个示例代码: ```matlab A = importdata('E:\各种数据集\220417\y001.txt'); B = importdata('E:\各种数据集\220417\001yy.txt'); Ax = A(:, 1); Ay = A(:, 2); Az = A(:, 3); Bx = B(:, 1); By = B(:, 2); Bz = B(:, 3); figure; scatter3(Ax, Ay, Az, 'filled', 'MarkerFaceColor', 'r'); hold on; scatter3(Bx, By, Bz, 'filled', 'MarkerFaceColor', 'b'); f = convhulln(A); patch('vertices', A, 'faces', f, 'facecolor', 'r', 'FaceAlpha', 0.3); f1 = convhulln(B); patch('vertices', B, 'faces', f1, 'facecolor', 'b', 'FaceAlpha', 0.3); axis equal; xlabel('X'); ylabel('Y'); zlabel('Z'); title('散点图绘制包络图'); ``` 这段代码会将两组数据点A和B绘制成散点图,并使用convhulln函数计算出A和B的凸包坐标,然后使用patch函数将凸包坐标连接成面,形成包络图。你可以根据自己的数据文件路径进行修改。 #### 引用[.reference_title] - *1* [阿雪学习记录|MATLAB绘制三维离散点包络体](https://blog.csdn.net/baixue1183/article/details/125013589)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值