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.pswp.cn/news/455208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455208.shtml
英文地址,請注明出處:http://en.pswp.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;使用任何必要的手段…