我对我的 Windows 系统编程有点生疏......
SendMessage()
如果(打开的)目标应用程序当前没有焦点,程序是否可以将击键(我猜是通过api 调用)发送到另一个应用程序?如果可能的话,它是否使目标应用程序成为活动应用程序,还是仍然保留在后台?
提前感谢您提供的任何信息!
我对我的 Windows 系统编程有点生疏......
SendMessage()
如果(打开的)目标应用程序当前没有焦点,程序是否可以将击键(我猜是通过api 调用)发送到另一个应用程序?如果可能的话,它是否使目标应用程序成为活动应用程序,还是仍然保留在后台?
提前感谢您提供的任何信息!
不,它不会改变焦点,除非后续调用执行 setfocus。它将保持相同的窗口顺序
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
这对我有用,但仅在 Windows XP 下。
但是在 Vista 和 Windows 7 上我也遇到了问题。可能与 UIPI。我正在尝试从注入到此进程的 DLL 发送消息以进行处理。
如何解决?
凭记忆:是的,不是的。
您正在寻找 WM_KEYDOWN:
PostMessage(hwndOther, WM_KEYDOWN, VK_ENTER, 0);
是的,您可以发送击键,不,它不会将另一个窗口带到顶部。
对于按键的定向发送,SendInput 是首选的本机方法,尽管它在 Vista/2008/W7 上受 UIPI(完整性级别)检查。您不能将击键发送到具有 IL > yours 的应用程序。
捕获和重定向输入的更通用的解决方案是全局键盘挂钩(请参阅 SetWindowsHookEx 的帮助)。但这是相当麻烦的事情——你必须处理如何发送击键,你会影响系统中的每个进程,因为你的代码被有效地插入到输入流中,它涉及到编写一个本地 DLL ......你必须知道正是你在做什么。
我们在我们的系统中使用了一个全局键盘挂钩(我写了它),但我们是一个特例——一个单一功能的紧急呼叫处理系统。我不建议将全局挂钩作为通用 Windows 计算的解决方案。
你不需要 SendInput() 或钩子
PostMessage 的答案是错误的。
您必须远程附加您的线程。在Win32 api Group上查看这是一个非常经典的问题(C 代码,正确的 MS 方法)