2016-03-22 32 views
0

我正在写一个应该在后台运行的可执行文件。我将按键发送到后台进程。它的工作原理如果在前台但不在后台

SendMessage(hWnd, WM_KEYDOWN, ((IntPtr)k), (IntPtr)0); 

上面的代码行将发送过程的关键字。如果我的光标在游戏的聊天框中,它将输入到聊天框中。

如果我不在聊天箱中发送该消息,它将不会执行任何操作,直到我选中它的行为,就好像我正在按住该键一样(我将按照所持密钥的方向行走),直到我按下我发送的密钥('s'是我正在使用的测试密钥)它将停止的地方。我也尝试在使用WM_KEYUP标志后立即发送消息,但这并没有阻止任何事情。

SetForegroundWindow (hWnd); 
SendMessage(hWnd, WM_KEYDOWN, ((IntPtr)k), (IntPtr)0); 

该段将针对该过程并开始移动。

我已经遍布互联网试图弄清楚如何在后台进行这项工作,以及只发送1个输入。我用间谍++搞砸了,但我认为如果它在我输入标签时发送命令时起作用,那它肯定是别的。

这里是我与http://pastebin.com/Jbx9BfSm

回答

0

您需要设置焦点窗口弹出的形式带到前面后,经营品种类。 聚焦窗口可以是一个按钮,列表框等

Focus and window activation in Win32

enter image description here

+0

抱紧你的链接阅读,但是从你说的话听起来让人有些困惑,哈哈。顺便说一句,我使用Unity3D来创建用户界面,所以它可能只是一点点不同。 – user1801067

+0

将表单带到前面后,处理“激活”事件。在这个事件中,将焦点设置在聊天室编辑框中。即需要接收输入的控件。然后发送消息。您可能需要在设置ForeGroundWindow和SendMessage函数之间添加延迟,因为时间可能是问题 – Eminem

+0

因此,该链接正在讨论每个线程如何使用另一个线程,其中一个线程用于窗口,另一个线程用于线程接收用户输入。当使用spy ++时,我的窗口没有孩子。我会尝试设置一个延迟,但是当你说“处理'激活'事件”时,你会介意说明你的意思吗? – user1801067