Python3生成脚本实现重置键盘键位

个人博客点这里

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by 秋叶夏风# 本模块的功能:<重置键盘键位>import sys
import ossave_format = "bat"  # 这个值可以修改,有两个选项(bat和reg),可选择生成bat批处理文件或者reg注册表脚本文件,功能一样class CountError(Exception):  # 文本文件格式错误异常passclass FileFormatError(Exception):  # save_format值异常passif save_format not in ["bat", "reg"]:raise FileFormatError("The variable 'save_format'`s value must be 'bat' or 'reg'.")if __name__ == "__main__":if not os.path.isdir("layout_" + save_format):os.mkdir("layout_" + save_format)if len(sys.argv) == 1:if save_format == "bat":with open("layout_bat/recover.bat", 'w') as f:f.write('@echo off\nreg delete "hklm\\system\\currentcontrolset\\control\\keyboard layout" /v "ScanCode Map" /f\necho "键位已恢复,重启系统后生效"\npause')input("恢复文件recover.bat已生成至layout_bat文件夹下,以管理员身份右键执行该文件后重启系统生效。\n按回车键退出程序...")else:with open("layout_reg/recover.reg", 'w') as f:f.write('Windows Registry Editor Version 5.00\n[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout]\n"ScanCode Map"=hex:00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00')input("恢复文件recover.reg已生成至layout_reg文件夹下,双击执行该文件后重启系统生效。\n按回车键退出程序...")elif len(sys.argv) == 2:scan_code_dict = {"00 00": "None","01 00": "Esc",  # 即Esc键的扫描码是"0001""02 00": "1","03 00": "2","04 00": "3","05 00": "4","06 00": "5","07 00": "6","08 00": "7","09 00": "8","0a 00": "9","0b 00": "0","0c 00": "-","0d 00": "=","0e 00": "Backspace","0f 00": "Tab","10 00": "Q","11 00": "W","12 00": "E","13 00": "R","14 00": "T","15 00": "Y","16 00": "U","17 00": "I","18 00": "O","19 00": "P","1a 00": "[","1b 00": "]","1c 00": "Enter","1d 00": "Left Ctrl","1e 00": "A","1f 00": "S","20 00": "D","21 00": "F","22 00": "G","23 00": "H","24 00": "J","25 00": "K","26 00": "L","27 00": "Semicolon",  # 由评论区指出,键盘上的“;”应该用其他值代替,否则会与配置文本文件中的“;”混淆"28 00": "'","29 00": "`","2a 00": "Left Shift","2b 00": "\\","2c 00": "Z","2d 00": "X","2e 00": "C","2f 00": "V","30 00": "B","31 00": "N","32 00": "M","33 00": ",","34 00": ".","35 00": "/","36 00": "Right Shift","37 00": "n*","38 00": "Left Alt","39 00": "Space","3a 00": "Caps Lock","3b 00": "F1","3c 00": "F2","3d 00": "F3","3e 00": "F4","3f 00": "F5","40 00": "F6","41 00": "F7","42 00": "F8","43 00": "F9","44 00": "F10","45 00": "Num Lock","46 00": "Scroll Lock","47 00": "n7","48 00": "n8","49 00": "n9","4a 00": "n-","4b 00": "n4","4c 00": "n5","4d 00": "n6","4e 00": "n+","4f 00": "n1","50 00": "n2","51 00": "n3","52 00": "n0","53 00": "n.","57 00": "F11","58 00": "F12","1c e0": "nEnter","1d e0": "Right Ctrl","37 e0": "PrtSc","38 e0": "Right Alt","47 e0": "Home","48 e0": "Up","49 e0": "Page Up","4b e0": "Left","4d e0": "Right","4f e0": "End","50 e0": "Down","51 e0": "Page Down","52 e0": "Insert","53 e0": "Delete","5b e0": "Left Windows","5c e0": "Right Windows",}fun_key_dict = dict((m.upper(), n) for n, m in scan_code_dict.items())  # 键值互换,键值全大写content = '00 00 00 00 00 00 00 00'# 用于暂时保存映射前后的键位,判断这次键位修改是否有风险before_map_set = set()after_map_set = set()with open(sys.argv[1]) as f:p = f.read().strip().split(';')p.remove('')content += ' {:0>2x} 00 00 00'.format(len(p) + 1)try:for i in p:if len(i.strip().split(':')) == 2:before_map_set.add(i.split(':')[0].strip().upper())after_map_set.add(i.split(':')[1].strip().upper())content += ' ' + fun_key_dict[i.split(':')[1].strip().upper()] + ' ' + fun_key_dict[i.split(':')[0].strip().upper()]else:raise CountErrorcontent += ' 00 00 00 00'except KeyError:print("文件中键名称有误")except CountError:print("文件中未按格式书写")else:if before_map_set != after_map_set:run = input("此次键位替换存在风险,{}键功能将在键盘上无对应按键,是否继续?(输入y继续,否则退出程序)".format(str(before_map_set - after_map_set)[1:-1]))if run != 'y':sys.exit()if save_format == "bat":with open("layout_bat/" + '.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1]) + '.bat', 'w') as g:g.write('@echo off\nreg add "hklm\\system\\currentcontrolset\\control\\keyboard layout" /v "ScanCode Map" /t REG_BINARY /d "{}" /f\necho "键位已完成修改,重启系统后生效"\npause'.format(''.join(content.split())))input("...\n{}文件已生成至layout_bat目录下,右键以管理员身份执行该文件后重启系统生效。\n按回车键退出程序...".format('.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1]) + '.' + save_format))else:with open("layout_reg/" + '.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1]) + '.reg', 'w') as g:g.write('Windows Registry Editor Version 5.00\n[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Keyboard Layout]\n"ScanCode Map"=hex:{}'.format(','.join(content.split())))input("...\n{}文件已生成至layout_reg目录下,双击执行该文件后重启系统生效。\n按回车键退出程序...".format('.'.join(sys.argv[1].split('\\')[-1].split('.')[:-1]) + '.' + save_format))else:input("传入参数错误,按回车键退出程序...")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入

2.2.2 如何读入文本输入 最简单的处理任意文本的方式就是使用在卷Ⅰ中我们广泛使用的Scanner类。我们可以从任何输入流中构建Scanner对象。或者&#xff0c;我们也可以将短小的文本文件像下面这样读入到一个字符串中&#xff1a; 在早期的Java版本中&#xff0c;处理文本输入的…

leetcode add Two Numbers

部分 conditional operators ?:写的statements 在有的编译器下能通过&#xff0c;有的可能通不过 base operand of -> has non-pointer type ListNode转载于:https://www.cnblogs.com/liyongguo/p/7152365.html

amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!

好课推荐&#xff1a;1.CAD2014&#xff1a;点击查看2.室内CAD&#xff1a;点击查看3.CAD2019&#xff1a;点击查看4.CAD2018&#xff1a;点击查看5.【bim】revit&#xff1a;点击查看6.室内手绘&#xff1a;点击查看7.CAD三维&#xff1a;点击查看8.全屋定制&#xff1a;点击查…

JM8.5中的7种宏块模式问题

JM8.5中的7种宏块模式问题 收藏 Outline: 1、 CFG文件中有关可变尺寸宏块模式的相关选项2、 7种宏块模式对应的数值常量3、 7种宏块模式被分成宏块和亚宏块4、 如何对宏块和亚宏块的运动估计&#xff0c;采用一个共同的函数来处理5、 遗留问题1、CFG文件中有关可变尺寸宏块…

python高级编程技巧

个人博客点这里 如何在列表,字典,集合中根据条件筛选数据 方法1:通过迭代来进行判断筛选 解决方案 函数式编程: 如何统计序列中元素的出现频度 解决方案:使用collections.Counter对象 将序列传入Counter的构造器,得到Counter对象是元素频度的字典 Counter.most_common(n)…

2016年安全身份识别主流趋势

安全身份识别解决方案商HID Global通过从不同行业市场的重要客户那里所获得的深刻洞察&#xff0c;以及公司最新解决方案在前瞻性合作伙伴和全球各地的终端用户中进行的试点项目与正式部署情况&#xff0c;确定了2016年最值得业界关注的安全趋势。HID Global 广阔的行业视角&am…

列出一个目录中所有文件及大小

package com.test.tree;import java.io.File;/*** 列出一个目录中所有的文件和他们的大小* author wyl**/ public class FileList {public void list(File f){ //文件根目录&#xff0c;深度为0list(f,0);}/*** * param f* param depth 为了显示文件的层级形式*/public void li…

多媒体音频格式解析WMA WAV OGG AAC APE FLAC

无论是MP3还是MP4&#xff0c;甚至手机和多媒体DC&#xff0c;产品所支持的各种格式往往让人眼花缭乱。特别是对于刚上手的新手玩家来说&#xff0c;各种格式都有哪些特性&#xff0c;在实际 使用当中有多少格式实用或者必须&#xff0c;其实有很多方面需要我们来系统的了解。这…

数据分析之pandas笔记

Pandas 一个用于表示表格类型的内容 课时4&#xff1a;jupyter21 分22 秒课时5&#xff1a;pandas的内容24 分31 秒课时6&#xff1a;series内容38 分19 秒课时7&#xff1a;dataframe25 分50 秒 # 载入pandas库 import pandas as pd import numpy as nps pd.Series([2,4,6…

Apache日志记录组件Log4j出现反序列化漏洞 黑客可以执行任意代码 所有2.x版本均受影响...

开源的东西用的人多了&#xff0c;自然漏洞就多。Apache用于日志记录的组件Log4j使用非常灵活&#xff0c;在相当多的开源项目中都有使用&#xff0c;此次漏洞影响所有Apache Log4j 2.*系列版本&#xff1a; Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1&#xff0c;使用Jav…

react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程&#xff0c;关键部分代码如下。首先在java后台中设置response中的参数&#xff1a;public void exportExcel(HttpServletResponse response, String fileName, String sheetName,List titleRow, List> dataRo…

Python常见的170道面试题全解析答案

个人博客点这里 语言特性 1. 谈谈对 Python 和其他语言的区别 答&#xff1a;Python 是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库&#xff0c;他是一门强类型的可移植、可扩展&#xff0c;可嵌入的解释型编程语言&#xff0c;属于动态语言。 …

WMA文件信息格式分析及代码

WMA文件信息格式分析及代码 收藏 ASF文件和WMA文件格式差不多。具体请看下面我写的代码。文件分析根据mplayer其中的asfhead.c提供的代码进行分析。mplayer只解除出了标准的wma头信息&#xff0c;其扩展信息并没有解析出来。代码如下. /*每一个WMA文件&#xff0c;它的头16个字…

[No0000101]JavaScript-基础课程1

JavaScript 是一种轻量级的编程语言&#xff0c;很容易学习&#xff0c;同时也是一种被广泛用于客户端Web开发的脚本语言。通过本课程学习&#xff0c;我们可以了解到JavaScript的基本语法知识&#xff0c;以及怎样使用它去创建简单的游戏和应用。 1.获取字符的长度 "youN…

研究人员发现Office Word 0Day攻击 这个漏洞绕过了word宏安全设置 绿盟科技、McAfee及FireEye发出警告...

这次的0Day漏洞确实很厉害&#xff0c;以往攻击者诱使用户点击Word文档&#xff0c;由于其中包含了恶意脚本&#xff0c;大多数需要用户启用了宏。但这次的漏洞不是&#xff0c;受害者无需启用宏&#xff0c;也会中招&#xff0c;而且漏洞覆盖Windows所有版本&#xff08;包括W…

秀米svg点击显示另一张图_SVG的雷,你踩过了没?

原标题&#xff1a;SVG的雷&#xff0c;你踩过了没&#xff1f;随着SVG互动布局的出现和在H5的应用越来越多&#xff0c;不少小伙伴们会想在秀米里上传自己制作的SVG图形。秀米的首页顶部教程收录了一篇关于SVG图形的讲解&#xff1a;「秀米的SVG图片」&#xff0c;里面主要介绍…

关于C10K问题详解-突破单机性能是高性能网络编程

本文转自:https://www.jianshu.com/p/ba7fa25d3590 C10K问题由来 随着互联网的普及&#xff0c;应用的用户群体几何倍增长&#xff0c;此时服务器性能问题就出现。最初的服务器是基于进程/线程模型。新到来一个TCP连接&#xff0c;就需要分配一个进程。假如有C10K&#xff0c;…

数据中心传输需求成以太网市场巨大推动力

近日&#xff0c;市场研究机构Infonetics作出评估称&#xff0c;数据中心以太网市场将迎来全面发展的势头&#xff0c;其驱动力则在于当前数据中心以太网络交换接口由10Gbps产品向25Gbps乃至50Gbps标准的大规模升级。 根据对2014年第三季度的市场销售情况研究&#xff0c;该公司…

Gina DLL

Windows的开机密码认证模块一般是由Gina DLL完成的。在NT/2000中交互式的登陆支持是由WinLogon调用GINA DLL实现的&#xff0c;GINA DLL提供了一个交互式的界面为用户登陆提供认证请求。1.Gina原理WinLogon会和GINA DLL进行交互&#xff0c;缺省是MSGINA.DLL(在System32目录下)…

ultilize什么意思_ultilize是什么意思

1. We also ultilize the supports of NSFC for other valuable researches.我们还利用基金支持&#xff0c;做了其他一些有价值的科研工作。2. Recover the second segment with all due haste, ultilize any means necessary.尽快取回第二部分&#xff0c;使用任何必要的手段…