【发布时间】:2019-06-15 19:08:25
【问题描述】:
我需要使用 C# 将密钥发送到非活动的“ePSXe”窗口。我使用 Spy++ 获得了窗口的句柄,但是当我使用此代码发送密钥“x”时,我什么也没得到。我该怎么办?
我尝试了 Msg 的不同值,如 0x0100、0x0101 和 0x0102,但没有任何效果。我也试过SendMessage,结果是一样的。
[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void Send_X(IntPtr p)
{
PostMessage(p, 0x0100, (IntPtr)Keys.X, IntPtr.Zero);
}
我希望窗口能够响应我的键。我只发送了 F 键“F1,F2..”,但没有发送字母键。
SendMessage(p, 0x0100, (IntPtr)Keys.F4, IntPtr.Zero);
SendMessage(p, 0x0101, (IntPtr)Keys.F4, IntPtr.Zero);
我认为发送到不活动的游戏应用程序并不容易,但是这个解决方案对我帮助很大,但我必须专注于 ePSXe。 Sending keys to a DirectX Game.
我仍在寻找可以发送到非活动游戏窗口的解决方案。
【问题讨论】:
-
如果您的上述评论对您的问题很重要,请edit它,否则可能会被删除。
-
为什么不使用 SetForegroundWindow(p) 将窗口置于顶部,使其具有输入焦点,然后使用 SendKeys.SendWait("X")?
-
我目前使用这个
SetForegroundWindow(p)作为一个不完美的解决方案。我的最终目标是发送密钥而不需要将窗口置于前台,因为我想同时操作多个窗口。 -
你是怎么弄到句柄的?从 Spy++ 直接复制?
FindWindow()? -
使用这个
handle = Process.GetProcessesByName("ePSXe")[0].MainWindowHandle;,然后我用 Spy++ 确认它。
标签: c# directx sendmessage postmessage