这个是我在哔哩哔哩中发现的感觉比较实用在这里发表一下使用过程中的问题和见解
原作者视频旧手机改电脑外挂-效率或将“提升300%?”_哔哩哔哩_bilibili
参考视频旧手机改电脑外挂,简陋的参考视频_手机游戏热门视频 (bilibili.com)
感谢这两位博主
这个是文字教程和番外篇使用CyberController来将旧手机改造成电脑外挂------手机交互翻译、人脸解锁、语音识别....各个功能等你来探索_我真的爱发明的博客-CSDN博客_cybercontroller
zCyberController手机外挂番外篇:源代码的二次修改_二次更改外挂_我真的爱发明的博客-CSDN博客
如果不能用或者出了BUG可以把KeyboardListener.py的代码改成如下所示
import keyboard
import time
from screen_shot import ScreenCapture
import io
import pyautogui
class KeyboardListener:
def __init__(self, tcpServer):
self.tcpServer = tcpServer
self.t = 0
self.c = 0
self.key_state_map={}
self.screen_capture = None
def listen_keyboard(self,callback):
self.callback = callback
keyboard.hook(self.onKeyEvent)
keyboard.wait()
def onImgCapture(self,pic):
imgByteArr = io.BytesIO()
pic.save(imgByteArr, format='JPEG')
bytes_data = imgByteArr.getvalue()
self.tcpServer.send_img(bytes_data)
def isCtrlHolding(self):
return ('ctrl' in self.key_state_map and self.key_state_map['ctrl']=='down')\
or ('left ctrl' in self.key_state_map and self.key_state_map['left ctrl']=='down')\
or ('right ctrl' in self.key_state_map and self.key_state_map['right ctrl']=='down')
def isAltHolding(self):
return ('alt' in self.key_state_map and self.key_state_map['alt']=='down')\
or ('left alt' in self.key_state_map and self.key_state_map['left alt']=='down')\
or ('right alt' in self.key_state_map and self.key_state_map['right alt']=='down')
def isKeyHolding(self,key):
return (key in self.key_state_map and self.key_state_map[key]=='down')
def onKeyEvent(self,key):
#update key_state_map
self.key_state_map[key.name.lower()]=key.event_type
#is screenshoot?
if self.isKeyHolding("caps lock")\
and key.event_type=="down"\
and key.name.lower()=="a":
self.screen_capture = ScreenCapture()
self.screen_capture.are_capture(self.onImgCapture)
#print(self.key_state_map)
#is triple c?
# if key.event_type=="down" \
# and key.name.lower()=="c" \
# and self.isCtrlHolding():
#
# if self.t == 0:
# self.t=time.time()
# self.c += 1
# print("wait for nex c",self.c)
# return
#
# if (time.time()-self.t<0.5):
# self.t=time.time()
# self.c += 1
# print("wait for nex c:",self.c)
#
# else:
# self.c = 0
# self.t=0
# print("wait for nex c",self.c)
#
# if self.c>=2:
# self.c=0
# print("need trans")
# if self.callback:
# self.callback()
if key.event_type=="down" \
and key.name.lower()=="q" \
and self.isCtrlHolding():
pyautogui.hotkey('ctrl', 'c')
print("need trans")
if self.callback:
self.callback()
如果自动杀进程的的话修改Controller.py为如下代码
import json
import time
from ComputerMonitor import ComputerMonitor
from KeyboardListener import KeyboardListener
from TcpServer import TcpServer
from service import *
import threading
def on_message_received(data):
command_message = json.loads(data)
script = command_message["script"]
params = command_message["params"]
exec(script)
def on_screen_locked():
print("screen locked")
data = json.dumps({"command":2,"message":""})
print(data)
tcpServer.send_text(data)
computerMonitor = ComputerMonitor(on_screen_locked)
def on_tcp_connected():
if not computerMonitor.started:
computerMonitor.start()
tcpServer = TcpServer()
tcpServer.set_receive_listener(on_message_received)
tcpServer.connected_listener = on_tcp_connected
tcpServer.start()
keyboardListener = KeyboardListener(tcpServer)
def onTrans():
print("need trans1111")
content = getClipContent()
text = json.dumps({"command":1,"message":content})
tcpServer.send_text(text)
def Trans_alive(): #用来进行TCP保活
content = ''
# text = json.dumps({"command":1,"message":content})
text = json.dumps({"command":11,"message":content}) #这里之所以用11,而不是1,是因为原作者的command1对应的命令是翻译,会在手机端触发对应的翻译任务看,而11就只相当于是一条空命令了,既可以完成保活,又不会干扰手机端的命令执行,一举两得
print("text:", text)
tcpServer.send_text(text)
def run():
print('用来保活的,不用管我')
t = threading.Timer(3, run)
t.start()
Trans_alive()
t = threading.Timer(3,run)
t.start()
keyboardListener.listen_keyboard(onTrans)
如果连接不到的话可以按下键盘的win+R
输入cmd
查看IP配置
有几个适配器就用它减一找到TcpServer.py编辑它把红圈圈住的数字改为刚才得到的数字
好了这就是我的一些见解