鱼C论坛

 找回密码
 立即注册
查看: 1446|回复: 0

[作品展示] 写了一个用安卓手机做鼠标的

[复制链接]
发表于 2018-6-17 13:54:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Daskbar 于 2018-6-17 13:56 编辑

用的无线鼠标,突然没电,然后就想到写一个这个,虽然已经有现成的软件能实现这个功能甚至更好
主要是用的安卓的adb调试功能,使用的时候要打开usb调试,我用的是小米手机,有两个usb调试开关都要打开
还有就是用了pyautogui的控制鼠标的功能,这个库其他东西也挺好的甚至有图像识别功能
这里只写了移动鼠标和左键点击,右键之类的懒得写了
另外,adb是可以无线调试的,楼主刚才试了试是可以的,不过那是adb的内容了,随便百度一下就能查到这里就不说了
学python不久,望指正
代码如下

  1. import subprocess
  2. import copy
  3. import pyautogui


  4. class Data:
  5.     def __init__(self, position):
  6.         self.position_now = position
  7.         self.position_old = [0,0]
  8.         self.states = 0
  9.         
  10.     def set_position(self,position):
  11.         if self.states == 0:#刚按下的时候也给old一个值,以免后面计算两点距离的时候出错
  12.             self.position_old = position
  13.             self.position_now = position
  14.         else:
  15.             self.position_old = self.position_now
  16.             self.position_now = position

  17.     def get_rel(self):#获取与上个点之间的距离
  18.         dx = self.position_now[0] - self.position_old[0]
  19.         dy = self.position_now[1] - self.position_old[1]
  20.         return [dx,dy]

  21. def main():
  22.     pyautogui.PAUSE = 0 #pyautogui 默认每条指令间隔0.1秒
  23.     pyautogui.FAILSAFE = False#关闭pyautogui防故障设置,否则鼠标移动到左上角会中断程序

  24.     order = r'adb shell getevent /dev/input/event2'
  25.     pi = subprocess.Popen(order, shell=True, stdout=subprocess.PIPE)

  26.     position = [0, 0]
  27.     pos = Data(position)
  28.     states = True #用于检测是否按下,用于只检测手按下之后的数据
  29.    
  30.     for i in iter(pi.stdout.readline, 'b'):
  31.         print(i)
  32.         tempstring = i.decode('utf-8').split('\r')[0].split(' ')
  33.         if tempstring[2] == '00000000' and tempstring[1] == '014a':  # 手指松开
  34.             if pos.states <= 3:#这里按使用体验可以改变数值,数值越大点击越灵敏(误),其实是不知道怎么检测单击信息而出此下策
  35.                 pyautogui.click()
  36.             states = False
  37.             position = [0, 0]
  38.         elif tempstring[0] == '0001' and tempstring[2] == '00000001':  # 手指按下
  39.             states = True
  40.             pos.states = 0

  41.         if states is True:
  42.             if tempstring[1] == '0035':
  43.                 position[0] = int(tempstring[2],16)
  44.             elif tempstring[1] == '0036':
  45.                 position[1] = int(tempstring[2],16)

  46.             if tempstring[0] =='0000' and tempstring[2]=='00000000':
  47.                 pos.set_position(copy.copy(position))
  48.                 pyautogui.moveRel(pos.get_rel(),duration=0) #根据滑动的相对距离移动,后边的参数是函数执行后的延迟时间
  49.                 pos.states += 1

  50. if __name__ == '__main__':
  51.     main()
  52.                
复制代码

ADB.zip

526.99 KB, 下载次数: 1

adb电脑端,放在与代码一个目录

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 06:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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