gpt4 book ai didi

c# - 我想通过 SendInput API 发送一些 key

转载 作者:可可西里 更新时间:2023-11-01 11:37:01 25 4
gpt4 key购买 nike

我想通过 C# 上的 SendInput API 向游戏发送一些 key 。 (我的环境是Windows 7 64bit)

我写了一些代码如下:



 [DllImport("user32.dll")]
static extern int SendInput(int nInputs, INPUT[] pInputs, int cbSize);

[StructLayout(LayoutKind.Sequential)]
私有(private)结构 MOUSEINPUT
{
公共(public) int dx;
公共(public)诠释;
public uint 鼠标数据;
公共(public)单位 dwFlags;
公共(public)单位时间;
公共(public) IntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
私有(private)结构 KEYBDINPUT
{
公共(public)短周;
公共(public)短 wScan;
公共(public) int dwFlags;
公共(public)时间;
公共(public) IntPtr dwExtraInfo;
}

[StructLayout(LayoutKind.Sequential)]
私有(private)结构 HARDWAREINPUT
{
公共(public)单位 uMsg;
public ushort wParamL;
public ushort wParamH;
}

[StructLayout(LayoutKind.Explicit)]
私有(private)结构输入
{
[FieldOffset(0)]
公共(public)单位类型;
[FieldOffset(4)]
公共(public) MOUSEINPUT mi;
[FieldOffset(4)]
公共(public) KEYBDINPUT ki;
[FieldOffset(4)]
公共(public) HARDWAREINPUT 嗨;
}

公共(public)静态无效 WalkFront()
{
输入[]输入=新输入[1];

按键 virtualKeycode = (Keys)0x15;

输入 [0].type = INPUT_KEYBOARD;
inputs[0].ki.wVk = (short)virtualKeycode;
inputs[0].ki.wScan = (short)MapVirtualKey((int)virtualKeycode, 0);
输入[0].ki.dwFlags = KEYEVENTF_SCANCODE;
输入[0].ki.time = 0;
输入[0].ki.dwExtraInfo = GetMessageExtraInfo();

SendInput(1, 输入, Marshal.SizeOf(输入[0]));
}

但是它不能正常工作。

显然,这段代码可以向游戏发送BackSpace。其实这段代码可以删除Notepad.exe上的一个字符。

奇怪的是,此代码仅向应用程序发送 BackSpace。我更改了这段代码中的键码(我试过 0x14、0x13、0x12 等)。 但是,这段代码只发送BackSpace

我想向应用程序发送另一个 key (J、K、L...等),但我不能。

有什么建议吗?谢谢

最佳答案

请记住,按键事件由一个按键事件和之后的一个按键事件组成。这意味着要“发送退格键”,您需要调用 SendInput 两次,一次是按下键,一次是松开键。如果您在释放键时调用 SendInput 失败,大多数应用很可能会忽略后续按键操作。

关于c# - 我想通过 SendInput API 发送一些 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8835126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com