我正在尝试为我玩的游戏编写一个小应用程序,允许我向其发送按键。不幸的是,他们的软件会阻止来自SendMessage / PostMessage和SendKeys的传入按键事件。通常情况下我会说这是有意的,但不过是......
我的G15键盘允许您为游戏创建键绑定宏,并且可以正常工作。由于宏是从键盘软件运行的,因此它们使用的是其他形式的按键发送方式,而不是我已经尝试过的方式。
他们是一种较低级别的按键操作方式,还是基本上以推送方式发送方式?这是我到目前为止的代码尝试......
private void button1_Click(object sender, EventArgs e)
{
// TRY #1
IntPtr hWnd = FindWindow("NIVAL_MMO_ENGINE", "Allods Online");
PostMessage(hWnd, WM_KEYDOWN, ((IntPtr)Keys.W), IntPtr.Zero);
// TRY #2
IntPtr Handle = FindWindow("NIVAL_MMO_ENGINE", "Allods Online");
// Verify that Process is a running process.
if (Handle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(Handle);
SendKeys.SendWait("w");
}
答案 0 :(得分:1)
将密钥放入输入队列的最低级别方法是SendInput。如果这不起作用,那么游戏就会在输入堆栈中做一些有趣的事情。
G15键盘完全可能支持“硬件”宏 - 即键盘本身正在生成一系列键上/下事件。
答案 1 :(得分:1)
要使用PostMessage函数发送密钥,需要定义如下参数:
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, Int64 lParam);
public const uint WM_KEYDOWN = 0x100;
public const uint WM_KEYUP = 0x101;
// sends the W key
PostMessage(handle, WM_KEYDOWN, 0x00000057, 0x00110001);
PostMessage(handle, WM_KEYUP, 0x00000057, 0xC0110001);
你可以在Spy ++中找到参数, 享受!!