实现使用SendInput函数来模拟键盘输入

网友这个问题,可以尝试使用SendInput函数来模拟键盘输入,这个函数可以在锁屏状态下有效。

如何使用SendInput函数来模拟键盘输入的问题,下面来解释一下:

SendInput函数是Windows API函数,用于向操作系统发送输入事件,以模拟键盘输入。它可以用来模拟按键,移动鼠标,发送文本,等。

使用SendInput函数来模拟键盘输入,首先需要定义一个INPUT结构体,其中包含了要发送的输入事件的类型,以及要发送的键盘输入的信息。然后,调用SendInput函数,将INPUT结构体作为参数传入,以模拟键盘输入。

例如,要模拟按下A键,可以定义一个INPUT结构体,其中type属性设置为INPUT_KEYBOARD,wVk属性设置为0x41(A键的键码),wScan属性设置为0,dwFlags属性设置为0,dwExtraInfo属性设置为0。然后,调用SendInput函数,将这个INPUT结构体作为参数传入,即可模拟按下A键。

故,用JavaScript编写实现使用SendInput函数来模拟键盘输入如下:

#include <windows.h> #include <stdio.h> 
int main() { 
INPUT ip;
 / Set up a generic keyboard event. ip.type = INPUT_KEYBOARD; ip.ki.wScan = 0;
 / hardware scan code for key ip.ki.time = 0; ip.ki.dwExtraInfo = 0;
 / Pres the "A" key ip.ki.wVk = 0x41; / virtual-key code for the "a" key ip.ki.dwFlags = 0;
 / 0 for key pres SendInput(1, &ip, sizeof(INPUT);
 / Release the "A" key ip.ki.dwFlags = KEYEVENTF_KEYUP;
 / KEYEVENTF_KEYUP for key release SendInput(1, &ip, sizeof(INPUT); return 0;
 }

 下面就是使用python实现使用SendInput函数来模拟键盘输入如下:

import ctypes
import time

SendInput = ctypes.windl.user32.SendInput

# C struct redefinitions
PUL = ctypes.POINTER(ctypes.c_ulong)
class KeyBdInput(ctypes.Structure):
    _fields_ = [("wVk", ctypes.c_ushort),
    ("wScan", ctypes.c_ushort),
    ("dwFlags", ctypes.c_ulong),
    ("time", ctypes.c_ulong),
    ("dwExtraInfo", PUL)]

class HardwareInput(ctypes.Structure):
    _fields_ = [("uMsg", ctypes.c_ulong),
    ("wParamL", ctypes.c_short),
    ("wParamH", ctypes.c_ushort)]

class MouseInput(ctypes.Structure):
    _fields_ = [("dx", ctypes.c_long),
    ("dy", ctypes.c_long),
    ("mouseData", ctypes.c_ulong),
    ("dwFlags", ctypes.c_ulong),
    ("time",ctypes.c_ulong),
    ("dwExtraInfo", PUL)]

class Input_I(ctypes.Union):
    _fields_ = [("ki", KeyBdInput),
    ("mi", MouseInput),
    ("hi", HardwareInput)]

class Input(ctypes.Structure):
    _fields_ = [("type", ctypes.c_ulong),
    ("i", Input_I)]

    # Actuals Functions

def PresKey(hexKeyCode):
    extra = ctypes.c_ulong(0)
    i_ = Input_I()
    i_.ki = KeyBdInput( 0, hexKeyCode, 0x08, 0, ctypes.pointer(extra) )
    x = Input( ctypes.c_ulong(1), i_ )
    ctypes.windl.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))

def ReleaseKey(hexKeyCode):
    extra = ctypes.c_ulong(0)
    i_ = Input_I()
    i_.ki = KeyBdInput( 0, hexKeyCode, 0x08 | 0x02, 0, ctypes.pointer(extra) )
    x = Input( ctypes.c_ulong(1), i_ )
    ctypes.windl.user32.SendInput(1, ctypes.pointer(x), ctypes.sizeof(x))



if __name__ == '__main__':
    print(PresKey(0x1))
    # time.sleep(1)
    print(ReleaseKey(0x1))
    # time.sleep(1)

什么是结构化查询语言

结构化查询语言(Structured Query Language,简称SQL)是一种用于访问和操纵数据库的标准化语言。它由一系列的命令组成,可以用来查询、更新、插入和删除数据库中的数据。SQL可以用来查询数据库中的数据,并且可以

windl是一个Windows下的命令行工具,用于下载文件。它可以从HTP,HTPS,FTP和文件系统中下载文件,并且可以指定下载文件的位置。它还可以指定下载文件的大小,以及下载文件的最大速度。它还可以指定下载文件的格式,以及下载文件的最大时间。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
以下是VB.NET中使用SendInput函数模拟回车键的示例代码: ```vb.net Private Const INPUT_KEYBOARD As Integer = 1 Private Const KEYEVENTF_KEYUP As Integer = &H2 Private Const VK_RETURN As Integer = &HD Private Structure KEYBDINPUT Public wVk As Short Public wScan As Short Public dwFlags As Integer Public time As Integer Public dwExtraInfo As IntPtr End Structure Private Structure INPUT Public type As Integer Public ki As KEYBDINPUT End Structure Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Integer, ByVal pInputs() As INPUT, ByVal cbSize As Integer) As Integer Private Sub SendEnter() Dim input(1) As INPUT input(0).type = INPUT_KEYBOARD input(0).ki.wVk = VK_RETURN input(1).type = INPUT_KEYBOARD input(1).ki.wVk = VK_RETURN input(1).ki.dwFlags = KEYEVENTF_KEYUP SendInput(2, input, Len(input(0))) End Sub ``` 在这个示例中,定义了两个结构体:INPUT和KEYBDINPUT,用于描述输入事件和键盘输入事件。通过设置结构体中的成员变量,可以模拟按下和弹起键盘事件。 SendEnter()函数模拟了按下和弹起两个回车键事件,通过调用SendInput函数来发送输入事件。其中,nInputs参数指定了输入事件序列的数量,pInputs参数指定了输入事件序列的指针,cbSize参数指定了每个INPUT结构体的大小。 建议在使用SendInput函数时,尽量保证输入事件的顺序和正确性,以避免出现不必要的问题。同时,SendInput函数需要管理员权限才能正常工作,因此需要使用管理员权限运行程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SzetoZeZe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值