不太清楚该怎么解释。最基本的情况是,我正在寻找一种方法来更改当前的活动窗口(希望它是可以理解的)窗口,在该窗口中,文本是直接输入的。哇哦。
我已经发现的是msdn帮助和SetFocus()或SetActiveWindow( ),但是它并没有解决我的问题(或者,也可能,我只是错误地使用了它)。
简单地说:
HWND Dest = GetFocus();
... //Some moving around on the 'alt-tab level' :-|
SetFocus(Dest); 不会再次将Dest窗口设置为活动。请原谅新手的问题,希望你不会花太多时间。谢谢!
发布于 2012-02-15 18:03:03
SetFocus()不会将窗口带到顶部。它只是设置键盘焦点。
另一方面,SetActiveWindow()将特定的窗口放在顶部,但只有在调用它的应用程序也是拥有它的应用程序的情况下。(根据文件)。
当您说您确实尝试过SetActiveWindow()时,您是什么意思?它是怎么失败的?它产生了什么结果?
您可以尝试的另一个函数是SetForegroundWindow(),以防您想要激活属于另一个应用程序的窗口,但正如您在下面看到的(直接从文档中看到的),这有其问题:
系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:
发布于 2012-02-15 18:02:25
尝试使用SetForegroundWindow函数。
但是,请注意这方面有一些限制,在MSDN页面备注部分中已经解释了这些限制,我已经在这里复制了这些限制。
系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:
当用户使用另一个窗口时,应用程序无法将窗口强制到前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。
这意味着,如果您不拥有当前的前台进程(可能是当用户选择的时候),那么您就不能设置一个新的前台窗口。
周围有几个黑客(google SetForegroundWindow,你会发现它们),但它们是黑客,不是一个好主意--让用户决定前景是什么!(正如雷蒙德·陈在他的博客这里中解释的那样,黑客经常会导致程序挂起)。
https://stackoverflow.com/questions/9298574
复制相似问题