自研RPA:C#编写Windows屏幕自动解锁

news/2025/2/1 11:58:21/

自研RPA:C#编写Windows屏幕自动解锁

​ 经过一个多星期的调研,寻找通过程序完成windows屏幕自动的解锁,发现当下方法主要有两种,来也RPA实现屏幕自动解锁使用的是远程登录协议(RDP),未能用此方法解决此问题,换用另一种方法自动登录。通过尝试模拟键盘输入登录,使用C#编写发现在屏锁界面无法使用,最后查到python的WinIO库,可以实现驱动层面的模拟键盘,该方法的缺陷是必须要有ps/2键盘(笔记本自带键盘是的,外接大部分是USB键盘)。
在这里插入图片描述

1、Python 安装 Pywinio库。

2、安装64位系统上的驱动签名:

​ 以管理员身份打开命令窗口CMD。

​ 键入以下命令以启动测试签名。

​ bcdedit.exe /set TESTSIGNING ON

​ 重启计算机。

python模拟键盘键入代码

import pywinio
import time
import atexit# KeyBoard Commands
# Command port
KBC_KEY_CMD = 0x64
# Data port
KBC_KEY_DATA = 0x60g_winio = Nonedef get_winio():global g_winioif g_winio is None:g_winio = pywinio.WinIO()def __clear_winio():global g_winiog_winio = Noneatexit.register(__clear_winio)return g_winiodef wait_for_buffer_empty():'''Wait keyboard buffer empty'''winio = get_winio()dwRegVal = 0x02while (dwRegVal & 0x02):dwRegVal = winio.get_port_byte(KBC_KEY_CMD)def key_down(scancode):winio = get_winio()wait_for_buffer_empty();winio.set_port_byte(KBC_KEY_CMD, 0xd2);wait_for_buffer_empty();winio.set_port_byte(KBC_KEY_DATA, scancode)def key_up(scancode):winio = get_winio()wait_for_buffer_empty();winio.set_port_byte( KBC_KEY_CMD, 0xd2);wait_for_buffer_empty();winio.set_port_byte( KBC_KEY_DATA, scancode | 0x80);def key_press(scancode, press_time = 0.2):key_down( scancode )time.sleep( press_time )key_up( scancode )VK_CODE = {'1': 0x02,'2': 0x03,'3': 0x04,'4': 0x05,'5': 0x06,'6': 0x07,'7': 0x08,'8': 0x09,'9': 0x0A,'0': 0x0B,'a': 0x1E,'b': 0x30,'c': 0x2E,'d': 0x20,'e': 0x12,'f': 0x21,'g': 0x22,'h': 0x23,'i': 0x17,'j': 0x24,'k': 0x25,'l': 0x26,'m': 0x32,'n': 0x31,'o': 0x18,'p': 0x19,'q': 0x10,'r': 0x13,'s': 0x1F,'t': 0x14,'u': 0x16,'v': 0x2F,'w': 0x11,'x': 0x2D,'y': 0x15,'z': 0x2C,'backspace': 0x0E,'clear': 0x0C,'enter': 0x0D,'shift': 0x10,'ctrl': 0x11,'alt': 0x12,'caps_lock': 0x3A,'-': 0x0C,'=': 0x0D,'[': 0x1A,']': 0x1B,'\\': 0x2B,';': 0x27,"'": 0x28,'`': 0x29,',':0x33,'.': 0x34,'/': 0x35,
}def key_input(str):for c in str:try:key_press(VK_CODE[c])except:key_press(0x3A)time.sleep(0.5)key_press(VK_CODE[c.lower()])key_press(0x3A)key_press(0x1C)
time.sleep(2)
key_input(pwd)
time.sleep(2)
key_press(0x1C)
key_press(0x1C)

模拟按键网址
https://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html

3、使用C#将密码传给python,并调用python脚本实现屏保解锁功能


http://www.ppmy.cn/news/723157.html

相关文章

JavaScript 处理字符串数组数据方法

前端三件套中 JavaScript 就是充电处理业务逻辑的一个角色,在很多情况之下,或像在做项目之中去发起一些数据请求之后待服务器响应回馈给到客户端的时候,对于返回的数据需要进行一个格式的处理,比如有JSON,字符串&#…

java 解锁window屏幕,Android 监听锁屏、解锁、开屏 操作

1、首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; /** * Created by ${zyj} on 2016/6/…

android延迟解锁编程,Android无视屏幕解锁保护界面

Android存在三种屏幕解锁保护:图案解锁、PIN密码解锁和密码解锁。 我们可以使用java.lang.Object.android.app.KeyguardManger中的子类KeyguardLock可以控制Disable掉这些屏幕锁界面,从而达到不用输入密码,直接过掉屏幕锁界面来使用手机 主要使用KeyguardLock.disab…

深度学习的发展

目录 神经网络的复兴 图像识别和物体检测 自然语言处理和机器翻译 强化学习 生成模型和生成对抗网络(GAN) 迁移学习和预训练模型 基础设施和算力的提升 在过去的十年中,深度学习经历了巨大的发展和突破,以至于被广泛认为是…

Python基础 - 文件和流

1、打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为其唯一的一个强制参数,然后返回一个文件对象。模式(mode)和缓冲区(buffering)是可选的。 模式: r  读模式 w  写模式 a  追加模式 b 二进制模式,添加到其他…

京东方射频硬件岗一面面经

1.首先自我介绍,包括教育经历,研究方向 2.具体项目介绍 3.针对项目的HFSS驱动求解方式,Smith圆图能得到的信息 4.阻抗匹配

京东方android面试经验,绵阳京东方面试经验

面试过程: 在官网上申请,做测评通过后,参加学校的宣讲会,一般宣讲会结束后就会通知面试时间,我是下午听得宣讲会,第二天下午去面试的。因为学校比较小,人也少,面试官只有两个人&…

京东方/深天马

京东方是从电视显像管转型到液晶生产线,而深天马则是从另一条路线一路走来,最早深天马是做数控显示屏的。 殊途同归。 不过,毕竟起家路线不同,与京东方相比,深天马更多的偏向于小尺寸屏幕。 与京东方报表项目比较相似的…