2

我对我的 Windows 系统编程有点生疏......

SendMessage()如果(打开的)目标应用程序当前没有焦点,程序是否可以将击键(我猜是通过api 调用)发送到另一个应用程序?如果可能的话,它是否使目标应用程序成为活动应用程序,还是仍然保留在后台?

提前感谢您提供的任何信息!

4

6 回答 6

1

不,它不会改变焦点,除非后续调用执行 setfocus。它将保持相同的窗口顺序

于 2009-02-27T07:07:39.363 回答
1
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);

这对我有用,但仅在 Windows XP 下。

但是在 Vista 和 Windows 7 上我也遇到了问题。可能与 UIPI。我正在尝试从注入到此进程的 DLL 发送消息以进行处理。

如何解决?

于 2010-03-06T11:07:49.057 回答
0

凭记忆:是的,不是的。

您正在寻找 WM_KEYDOWN:

PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
于 2009-02-27T07:09:48.187 回答
0

是的,您可以发送击键,不,它不会将另一个窗口带到顶部。

于 2009-02-27T09:14:31.460 回答
0

对于按键的定向发送,SendInput 是首选的本机方法,尽管它在 Vista/2008/W7 上受 UIPI(完整性级别)检查。您不能将击键发送到具有 IL > yours 的应用程序。

捕获和重定向输入的更通用的解决方案是全局键盘挂钩(请参阅 SetWindowsHookEx 的帮助)。但这是相当麻烦的事情——你必须处理如何发送击键,你会影响系统中的每个进程,因为你的代码被有效地插入到输入流中,它涉及到编写一个本地 DLL ......你必须知道正是你在做什么。

我们在我们的系统中使用了一个全局键盘挂钩(我写了它),但我们是一个特例——一个单一功能的紧急呼叫处理系统。我不建议将全局挂钩作为通用 Windows 计算的解决方案。

于 2009-02-27T09:28:36.420 回答
0

你不需要 SendInput() 或钩子

PostMessage 的答案是错误的。

您必须远程附加您的线程。在Win32 api Group上查看这是一个非常经典的问题(C 代码,正确的 MS 方法)

于 2009-02-27T11:16:57.190 回答