【问题标题】:Simulate KeyPress in C# to Game在 C# 中模拟 KeyPress 到游戏
【发布时间】:2012-07-20 21:23:30
【问题描述】:

我正在尝试将按键模拟到另一个窗口,这是一个游戏。不起作用的事情是:

  • SendKey - 将输入作为字符串发送,例如一些文本或其他内容,但不用于 ENTER TAB 或其他关键键
  • InputSimulator - 完全浪费时间
  • SendInput - 对此也有一些问题。它无法编译,我之前从未使用过它
  • PostMessage - 这两个似乎几乎相同,并且它们再次发送文本但同样没有其他键,例如 ENTER TAB 或其他。如果我想按住键几秒钟,也无法计算出 wParam 的值。它是一个 32 位十六进制值,其中最后 16 位似乎是重复数。
  • SendMessage - 请参阅 PostMessage
  • AUTOIT 或 AHK 似乎很难将它们合并到 C# 中,如果有人知道如何做到这一点,这将有很大帮助,这意味着我可以在 C# .cs 文件中编写 AHK 脚本,以便编译. COM、ref 或任何东西。

DirectInput 有问题

public void Test_KeyDown()
{
        INPUT[] InputData = new INPUT[2];
        Key ScanCode =  Microsoft.DirectX.DirectInput.Key.W;

        InputData[0].type = 1; //INPUT_KEYBOARD
        InputData[0].ki.wScan = (short)VirtualKeyCode.NUMPAD2 ; //ScanCode;
        InputData[0].ki.dwFlags = (int)KEYEVENTF.SCANCODE;

        InputData[1].type = 1; //INPUT_KEYBOARD
        InputData[1].ki.wScan = (short)VKeys.VK_W; 
        InputData[1].ki.dwFlags = (int)(KEYEVENTF.KEYUP | KEYEVENTF.UNICODE);

        // send keydown
        if (SendInput(2, InputData, Marshal.SizeOf(InputData[1])) == 0)
        {
            System.Diagnostics.Debug.WriteLine("SendInput failed with code: " +
            Marshal.GetLastWin32Error().ToString());
        }
}

它给出了这个错误:

无法加载文件或程序集“Microsoft.DirectX.DirectInput.dll”或其中之一 它的依赖关系。不是有效的Win32应用程序。 (来自 HRESULT 的异常:0x800700C1)

我从 DirectX SDK 工具包 2007 中引用了它

我正在尝试将密钥发送到另一个实例或句柄。 C++ 或 C# 任何可以工作的东西都可以。

【问题讨论】:

  • 首先,将wScan改为wVk。在填写您需要的内容之前,最好将对象的内存清零。

标签: c# c++ keyboard keypress simulate


【解决方案1】:

看起来您正在尝试在 64 位解决方案中加载 32 位 dll,所以请使用 64 位 dll

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2014-11-14
    • 1970-01-01
    • 2017-10-28
    • 2019-05-09
    • 2010-11-28
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多