我正在尝试将密钥发送到应用程序。我测试了Handlewindow值使用的断点,以了解我正在做什么wirong但我无法找到解决方案。更详细一点,它是一个小游戏,当我激活聊天栏游戏时,我想要发送的密钥将写在那里,但我想在我玩游戏时使用命令。游戏没有警卫或一些保护措施。
这是我的代码:
[DllImport("user32.dll")]
static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
const uint WM_KEYDOWN = 0x0100;
private void button1_Click(object sender, EventArgs e)
{
string pName = textBox1.Text;
//Get Processes
Process[] processes = Process.GetProcessesByName(pName);
//Main part
foreach (Process p in processes)
if (p.ProcessName == (string)pName)
{
PostMessage(p.MainWindowHandle, WM_KEYDOWN, (int)Keys.W, 0);
}
}
就像我说的那样,它可以成功发送1000000次,但没有任何反应。 还有另一种方法可以将密钥发送到最小化甚至隐藏的Windows应用程序吗?它应该只发送到我的应用程序。
答案 0 :(得分:1)
如果我理解正确,您想要将密钥发送到游戏中。 在这种情况下,我认为游戏不是从Windows消息队列中获取密钥,它可能是使用DirectX或类似方式直接读取键盘状态。
看到这个类似的问题:
答案 1 :(得分:0)
程序员通常会对KeyUp
事件做出反应,而不是对事件做出反应;你尝试发送WM_KEYUP吗?
答案 2 :(得分:0)
你不能伪造这样的信息,并期望它能够可靠地工作 - 你所做的只是发送信息,没什么特别的。
这意味着如果目标程序以不同的方式测试输入(例如通过直接检查键状态,对不同的消息做出反应或仅使用完全不同的机制),目标程序最好可能完全忽略你的输入,最糟糕的是完全混淆。
使用SendInput函数(我不确定它是否作为.Net框架的一部分公开)。
一些有趣的博客文章非常相关:
答案 3 :(得分:0)