Python代码

import sys
import ctypes
import os
import win32
import win32gui
import threading
import time
import random
from typing import Sized
import serial
import logging
import configparser
import wx
import wx.xrc
import modbus_tk
import modbus_tk.modbus_rtu as mbrtu
import modbus_tk.defines as md
import configparser
import msvcrt
import win32api
import win32con
import base64
import psutilCloseInputFlag = 0
fd = win32gui.FindWindow("Shell_TrayWnd",None)
PASSWORD = ""
PASSWORDOK = 0
SETPASSWORD = 0
SETNEWPASSWORD = 0
passwordFile = open('pass.txt', 'r')
## 解密
readFilePassword = passwordFile.read()
print(readFilePassword)
pw = base64.decodebytes(bytes(readFilePassword, 'utf-8'))
pw = str(pw, encoding="utf-8")
## 获取运行的句柄
hwnd_title = dict()## 判断程序是否启动
def isOpen():time.sleep(1)def proc_exist(process_name):pl = psutil.pids()for pid in pl:if psutil.Process(pid).name() == process_name:return piddef get_all_hwnd(hwnd,mouse):if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})def get_win_jb(name):global hwnd_titlewin32gui.EnumWindows(get_all_hwnd, 0)for h,t in hwnd_title.items():if t != "":if(t == name):return h## 读取配置文件函数
def READ_CONFIG():cf = configparser.ConfigParser()father_path = os.getcwd()cf.read(father_path+"/config.ini",encoding='UTF-8')global JY_COM,JY_BAUDRATE,JY_BYTESIZE,JY_PARITY,JY_STOPBITS,MB_SLAVE,MB_STARTADDRESSglobal MB_READLENGTH,MB_OUTPUTVALUE,JY_MESS,JY_FONT,JY_FONTSIZE,JY_LOGFILEPATH,JY_ISSHUTOFFJY_COM = cf.get("JY","COM")JY_BAUDRATE = cf.get("JY","BAUDRATE")JY_BYTESIZE = int(cf.get("JY","BYTESIZE"))JY_PARITY = cf.get("JY","PARITY")JY_STOPBITS = int(cf.get("JY","STOPBITS"))MB_SLAVE = int(cf.get("MODBUS","SLAVE"))MB_STARTADDRESS = int(cf.get("MODBUS","STARTADDRESS"))MB_READLENGTH = int(cf.get("MODBUS","READLENGTH"))MB_OUTPUTVALUE = int(cf.get("MODBUS","OUTPUTVALUE"))JY_MESS = cf.get("Message","MESS")JY_FONT = cf.get("Message","FONT")JY_FONTSIZE = int(cf.get("Message","FONTSIZE"))JY_LOGFILEPATH = cf.get("Log","LOGFILEPATH")JY_ISSHUTOFF = int(cf.get("JY","ISSHUTOFF"))## 日志初始化函数
def logInit():global loggerlogger = logging.getLogger('jylog') #创建一个logger对象# 建立一个filehandler来把日志记录在文件里,级别为debug以上fh = logging.FileHandler(JY_LOGFILEPATH,'a')  fh.setLevel(level = logging.INFO)ch = logging.StreamHandler()ch.setLevel(level = logging.INFO)formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')fh.setFormatter(formatter)ch.setFormatter(formatter)logger.addHandler(fh)logger.addHandler(ch)## MODBUS线程
def MODBUS_READ_Thread():global app,window,logger,CloseInputFlag,PASSWORD,PASSWORDOK,JY_COM,JY_BAUDRATE,JY_BYTESIZE,JY_PARITY,JY_STOPBITS,widgetprint("串口:"+JY_COM)try:ModBusMaster = mbrtu.RtuMaster(serial.Serial(port=JY_COM,baudrate=JY_BAUDRATE, bytesize=JY_BYTESIZE, parity=JY_PARITY, stopbits=JY_STOPBITS))ModBusMaster.set_timeout(10.0)except serial.serialutil.SerialException:print("串口异常")logger.error('串口异常')win32api.MessageBox(0, "端口异常或程序已运行,程序将自动退出", "错误", win32con.MB_OK)os._exit(0)returntry:ModBusMaster.execute(slave=MB_SLAVE, function_code=md.READ_HOLDING_REGISTERS, starting_address=MB_STARTADDRESS, quantity_of_x=MB_READLENGTH, output_value=MB_OUTPUTVALUE)except modbus_tk.exceptions.ModbusInvalidResponseError:print("MODBUS测试通讯失败")logger.error('MODBUS测试通讯失败')win32api.MessageBox(0, "MODBUS测试通讯失败,程序将自动退出", "错误", win32con.MB_OK)os._exit(0)returnwhile 1==1:try:HoldValue = ModBusMaster.execute(slave=MB_SLAVE, function_code=md.READ_HOLDING_REGISTERS, starting_address=MB_STARTADDRESS, quantity_of_x=MB_READLENGTH, output_value=MB_OUTPUTVALUE)except modbus_tk.exceptions.ModbusInvalidResponseError:print("MODBUS通讯失败")logger.error('MODBUS通讯失败')print(HoldValue[0])if(PASSWORDOK == 1):if(HoldValue[0] == 1):time.sleep(0.1)continueelse:PASSWORD = ""PASSWORDOK = 0continueif(HoldValue[0] == 1):CloseInputFlag = 1window.Show(True)widget.Show(False)time.sleep(0.1)nhwnd = get_win_jb("提示324232")win32gui.ShowWindow(get_win_jb("提示324232"), 3)win32gui.SetWindowPos(nhwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0,win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE)win32gui.ShowWindow(fd,0)logger.error('HoldValue 1')else:CloseInputFlag = 2HideButton()window.Show(False)widget.Show(True)PASSWORD = ""win32gui.ShowWindow(fd,5)widgetnhwnd = get_win_jb("提示324232小挂件")win32gui.ShowWindow(widgetnhwnd, 9)logger.error('HoldValue 0')time.sleep(1)## 启动MDOBUS线程
def Start_MODBUS_READ_Thread():t1 = threading.Thread(target=MODBUS_READ_Thread)t1.setDaemon(True)t1.start()## 禁用键鼠线程
def CloseInputThread():global CloseInputFlag,PASSWORDwhile 1==1:if(CloseInputFlag == 1):# ctypes.windll.user32.BlockInput(True)win32api.keybd_event(136,0,0,0)time.sleep(0.03)else:# ctypes.windll.user32.BlockInput(False) time.sleep(0.03)def OpenCloseInputThread():t2 = threading.Thread(target=CloseInputThread)t2.setDaemon(True)t2.start()def OnClose(self, event):print("窗口点击关闭")def OnClose1(self):print("窗口点击关闭")def OnClose2(self, event):print("窗口点击关闭")def WidgetOnClose(self):global JY_ISSHUTOFFif(JY_ISSHUTOFF == 1):time.sleep(0.1)else:os._exit(0)def ShowButton():global button1,button2,button3,button4,button5,button6,button7,button8,button9button1.Show()button2.Show()button3.Show()button4.Show()button5.Show()button6.Show()button7.Show()button8.Show()button9.Show()def HideButton():global button1,button2,button3,button4,button5,button6,button7,button8,button9button1.Hide()button2.Hide()button3.Hide()button4.Hide()button5.Hide()button6.Hide()button7.Hide()button8.Hide()button9.Hide()def BUT1Click(self):global PASSWORDPASSWORD = PASSWORD +"1"
def BUT2Click(self):global PASSWORDPASSWORD = PASSWORD +"2"
def BUT3Click(self):global PASSWORDPASSWORD = PASSWORD +"3"
def BUT4Click(self):global PASSWORDPASSWORD = PASSWORD +"4"
def BUT5Click(self):global PASSWORDPASSWORD = PASSWORD +"5"
def BUT6Click(self):global PASSWORDPASSWORD = PASSWORD +"6"
def BUT7Click(self):global PASSWORDPASSWORD = PASSWORD +"7"
def BUT8Click(self):global PASSWORDPASSWORD = PASSWORD +"8"
def BUT9Click(self):global PASSWORDPASSWORD = PASSWORD +"9"
def BUT10Click(self):global PASSWORDPASSWORD = ""
def BUT11Click(self):global label2,SETPASSWORD,SETNEWPASSWORD,PASSWORD,PASSWORDOKSETPASSWORD = 0SETNEWPASSWORD = 0PASSWORD = ""PASSWORDOK = 0ShowButton()label2.SetLabel("请输入密码,按确认结束")
def BUT12Click(self):global CloseInputFlag,PASSWORD,PASSWORDOK,label2,SETPASSWORD,SETNEWPASSWORD,passwordFile,pw,widgetprint("正确密码:"+pw)print("输入:"+PASSWORD)if(SETNEWPASSWORD == 1):## 保存密码到文件SETNEWPASSWORD = 0writeOpen = open("pass.txt", 'w')## 加密jmCode = base64.encodebytes(PASSWORD.encode('utf-8')).decode()writeOpen.write(jmCode)# passwordFile = open('pass.txt', 'r')pw = PASSWORDlabel2.SetLabel("密码重置成功")returnif(SETPASSWORD == 1):if(PASSWORD == pw):label2.SetLabel("密码正确,请输入新密码,按确认结束")SETNEWPASSWORD = 1PASSWORD = ""returnelse:label2.SetLabel("密码错误,请重新按密码重置按钮")SETPASSWORD = 0PASSWORD = ""logger.error('password error')returnif(PASSWORD == pw):print("密码正确")CloseInputFlag = 2PASSWORDOK = 1win32gui.ShowWindow(fd,5)window.Show(False)widget.Show(True)widgetnhwnd = get_win_jb("提示324232小挂件")win32gui.ShowWindow(widgetnhwnd, 9)else:PASSWORD = ""label2.SetLabel("密码错误")logger.error('password error')def BUT13Click(self):global label2,SETPASSWORD,PASSWORDprint("密码重置")label2.SetLabel("请输入原来的密码,按确认结束")PASSWORD=""SETPASSWORD = 1ShowButton()## 主程序启动## 读取配置文件
READ_CONFIG()
## 日志启动
logInit()
time.sleep(1)
logger.error('INGROUP Start Now....')## 开始绘制窗口
app = wx.App()
wxSize=wx.DisplaySize()
window = wx.Frame(None, title = "提示324232")
panel = wx.Panel(window)
c_x, c_y, c_w, c_h = wx.ClientDisplayRect()## 中间提示字
label = wx.StaticText(panel, label = JY_MESS, pos = (500,300))
label.SetFont(wx.Font(JY_FONTSIZE, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))## 密码提示信息
label2 = wx.StaticText(panel, label = "提示", pos = (50,210))
label2.SetFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))## 密码按钮
button1 = wx.Button(panel, -1, "1", pos=(50, 20), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT1Click, button1)
button2 = wx.Button(panel, -1, "2", pos=(150, 20), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT2Click, button2)
button3 = wx.Button(panel, -1, "3", pos=(250, 20), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT3Click, button3)
button4 = wx.Button(panel, -1, "4", pos=(50, 80), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT4Click, button4)
button5 = wx.Button(panel, -1, "5", pos=(150, 80), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT5Click, button5)
button6 = wx.Button(panel, -1, "6", pos=(250, 80), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT6Click, button6)
button7 = wx.Button(panel, -1, "7", pos=(50, 140), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT7Click, button7)
button8 = wx.Button(panel, -1, "8", pos=(150, 140), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT8Click, button8)
button9 = wx.Button(panel, -1, "9", pos=(250, 140), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT9Click, button8)  ## 功能按钮
button10 = wx.Button(panel, -1, "清除", pos=(380, 20), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT10Click, button10)
button12 = wx.Button(panel, -1, "确认", pos=(380, 80), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT12Click, button12)
button11 = wx.Button(panel, -1, "异常关闭", pos=(380, 140), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT11Click, button11)
button13 = wx.Button(panel, -1, "密码重置", pos=(380, 200), size=(80,40))
window.Bind(wx.EVT_BUTTON, BUT13Click, button13)  ## 按钮设置样式
button1.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button2.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button3.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button4.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button5.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button6.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button7.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button8.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))
button9.SetFont(wx.Font(15, wx.FONTFAMILY_DEFAULT, wx.NORMAL, wx.FONTWEIGHT_BOLD))## 隐蔽密码按钮
HideButton()## 启动MODBUS线程
Start_MODBUS_READ_Thread()
## 启动禁用线程
OpenCloseInputThread()## 绑定窗口事件
window.Bind(wx.EVT_CLOSE, OnClose)
window.Bind(wx.EVT_ICONIZE, OnClose1)
# 全屏
window.ShowFullScreen(True)
#显示区域高
window.Maximize(True)
window.SetSize(wx.Size(c_w,c_h))
window.SetPosition(wx.Point(0,0))
win32gui.ShowWindow(fd,5)
window.Show(False)# 桌面运行小挂机
widget = wx.Frame(None, title = "提示324232小挂件",style=0|wx.TAB_TRAVERSAL)
widgetPanel = wx.Panel(widget)
widget.SetSize(wx.Size(50,40))
widget.SetPosition(wx.Point(0,0))widgetButton1 = wx.Button(widgetPanel, -1, "运行", pos=(5, 5), size=(40,30))
widgetButton1.SetBackgroundColour((0,255,127,1))
widgetButton1.SetForegroundColour((1,1,1,1))
# widgetButton2 = wx.Button(widgetPanel, -1, "停止", pos=(50, 5), size=(40,30))
# widget.Bind(wx.EVT_BUTTON, WidgetButton2Click, widgetButton2)
# widgetPanel.SetTransparent(0)
# widgetPanel.SetBackgroundColour((255,255,255,1))
widget.Bind(wx.EVT_CLOSE, WidgetOnClose)
widget.Show(True)widgetnhwnd = get_win_jb("提示324232小挂件")
win32gui.ShowWindow(widgetnhwnd, 9)app.MainLoop()

配置文件

[JY]
COM=COM5                   #红外连接端口号
BAUDRATE=9600                  #波特率
BYTESIZE=8                 #数据位
PARITY=N                   #校验位
STOPBITS=1                 #停止位
ISSHUTOFF=1                    #是否可关闭
[MODBUS]
SLAVE=1                        #MDOBUS标识
STARTADDRESS=0                 #MDOBUS开始地址
READLENGTH=1                   #MDOBUS读位数
OUTPUTVALUE=5                  #MDOBUS长度
[Message]
MESS=车辆过磅中,请稍后              #提示文字
FONT=微软雅黑                  #提示文字字体
FONTSIZE=30                    #提示文字字号
[Log]
LOGFILEPATH=C:\Users\mm\Desktop\JY\test.log    #日志存储文件

Python wxpy通过ModBus控制电脑鼠标和键盘相关推荐

  1. python控制电脑鼠标和键盘,登录QQ

    import os from pynput.mouse import Button,Controller from pynput.keyboard import Key from pynput.key ...

  2. 【机器视觉案例】(8) AI视觉,手势控制电脑鼠标,附python完整代码

    各位同学好,今天和大家分享一下如何使用 MediaPipe+Opencv 通过手势识别来控制电脑鼠标的移动和点击,如果有兴趣的话,可以代替鼠标去打游戏.先放图看效果.用画图板来测试 黄框代表电脑屏幕的 ...

  3. 基于mediapipe和opencv的手势控制电脑鼠标

    通过我的上一篇文章,可以了解到mediapipe关于手部检测的使用方法.这时我们就可以进行一些更加炫酷的操作.这篇文章我就来讲解一下如何用手势来控制电脑鼠标. 在开始之前我们要介绍一个能够操作电脑鼠标 ...

  4. python居然能语音控制电脑壁纸切换,只需60行代码

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 家在日常的电脑使用中,都会有自己喜爱类型的桌面 单纯的桌面有时候会让人觉得单调 今天,就由我带领大家只用60行代码打造一款语音壁纸切换器程序, 让大家能够 ...

  5. 计算机为什么连接鼠标后不能控制,电脑鼠标连接不上怎么回事解决教程

    鼠标连不上电脑怎么办,明明新买的鼠标却不能连接,是系统问题吗?那么下面就由学习啦小编来给你们说说电脑鼠标连接不上的解决方法吧,希望可以帮到你们哦! 电脑鼠标连接不上的解决方法一: 第一种方法即重启你的 ...

  6. 语音控制 python_用Python编程实现语音控制电脑

    电脑面前的你,是否也希望能让电脑听命于你? 当你累的时候,只需说一声"我累了",电脑就会放着优雅的轻音乐来让你放松. 或许你希望你在百忙之中,能让电脑郎读最新的NBA比分赛况-.一 ...

  7. python语音控制电脑程序_用Python编程实现语音控制电脑_天津SEO

    天津SEO 电脑面前的你,是否也希望能让电脑听命于你? 当你累的时候,只需说一声"我累了",电脑就会放着优雅的轻音乐来让你放松. 或许你希望你在百忙之中,能让电脑郎读最新的NBA比 ...

  8. 计算机鼠标与键盘基本知识,电脑鼠标和键盘的基础设置方法

    通过对键盘和鼠标的设置,可以提高它们的灵敏度,使之更符合自己的习惯. 1.键盘的设置:打开"控制面板" 2.找到"键盘"图标,双击打开 3.如下图红框处,此处是 ...

  9. python 常用win32api 后台截图 后台鼠标 后台键盘 后台输入文字 剪切板

    依赖包 import win32gui, win32con, win32api,win32ui from win32clipboard import * import cv2 获得焦点 win32ap ...

最新文章

  1. Active Diretory 全攻略(八)--组策略(2)
  2. C++学习网站。两个 CodeProject,Codeguru
  3. Mono 2.4 and MonoDevelop 2.0 have been released
  4. java中同步_在Java中的方法同步和语句同步(块同步) - Break易站
  5. 16 bit float 存储_面试官问我存储金额应该用哪种数据类型,我竟这样回答
  6. SSH Secure Shell显示GCC编译错误信息乱码解决方法
  7. Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF
  8. ajax如何提交多表单的值_25 HTML5表单基本控件(二)
  9. linux不能上网如何配置
  10. cmdb整体项目梳理(2)
  11. 大屏做成这样,领导不重用你都难
  12. openCVPracticalExercise学习笔记01
  13. 性能 1.84 倍于 Ceph!网易数帆开源分布式存储系统 Curve
  14. AutoCAD自定义填充图样详细教程
  15. java实现视频播放背景_使用VideoJS React的全屏背景视频
  16. VisualStudio2017编写masm32汇编程序以及语法高亮配置
  17. 边界类、控制类、实体类
  18. linux xps文件,XPS 文件扩展名: 它是什么以及如何打开它?
  19. dns被劫持怎么办,DNS被劫持了有什么解决办法?
  20. C++ 的算术、自增自减、位运算、关系与逻辑运算符(数据的操作)

热门文章

  1. 关于oracle数据库论文,Oracle数据库研究论文 有关Oracle数据库的论文
  2. python chromedriver_Linux下搭建Python3.7+Selenium+Chrome+Chromedriver
  3. autojs toast 可以改变字体颜色吗_你手中的渠道货够硬吗?看完这期 OFF WHITE x AIR JORDAN 5 对比,你就知道了!...
  4. 《程序员面试宝典》精华 底层部分
  5. matlab与微分方程
  6. [译文]通过一个通俗易懂的方式来了解下WebAssembly(一)
  7. 一个人如果没有计划,那和咸鱼有什么区别!
  8. 百度BAE JAVA环境项目部署和调试
  9. c+oracle+bulk,C#使用OracleBulkCopy
  10. linux修改maven端口号,Linux(centos7)安装maven3.5