我使用了BringWindowToTop函数设定窗口(设定的窗口是自己本身)为活动窗口。
但是生成EXE(包括DEBUG/RELEASE两个版本)文件后对cmd窗口(c:\windows\system32\cmd.exe)失效,现象是cmd窗口闪几下,未到最前面。奇怪有两点:其它窗口无此现象,在任何情况下都是好用的。在工程中执行无此现象,cmd窗能到最前面。望高手指点。
但是生成EXE(包括DEBUG/RELEASE两个版本)文件后对cmd窗口(c:\windows\system32\cmd.exe)失效,现象是cmd窗口闪几下,未到最前面。奇怪有两点:其它窗口无此现象,在任何情况下都是好用的。在工程中执行无此现象,cmd窗能到最前面。望高手指点。
HWND h = ::FindWindow(NULL, "C:\\WINDOWS\\system32\\cmd.exe");
BOOL b = ::BringWindowToTop(h);
自己窗口上按下一个按钮,启动计时器,设定10秒后执行BringWindowToTop代码.
在这期间手动把CMD放到我窗口上.
10秒后执行到OnTimer()函数,在OnTimer()中执行BringWindowToTop函数,把我自己窗口放到CMD窗口前.这时我自己窗口不能到CMD窗口前面.
但是用AttachThreadInput API函数其它窗口都实现了,只有CMD窗口不好使。在VISTA下也有这个问题,我怀疑CMD窗口内部实现有些特殊。
在XP下CMD窗口外观与其它窗口风格不一致,但在VISTA下风格统一了。遇到这样的问题实在是不好办,希望高手帮忙。
//取得当前的顶层窗口,共享同一个虚拟输入队列
AttachThreadInput(
GetWindowThreadProcessId(
::GetForegroundWindow(), 0),
GetCurrentThreadId(), TRUE); bSetForeOK = SetForegroundWindow(); //取得当前的顶层窗口,释放共享的虚拟输入队列
AttachThreadInput(
GetWindowThreadProcessId(
::GetForegroundWindow(), 0),
GetCurrentThreadId(), FALSE);
昨天还不行呢,但今天用其他人的机器还是不行.cnzdgs谢谢你的帮忙.
在Windows核心编程这本书里,有个例子程序,功能和我要的一样.
位置是:第27章 硬件输入模型和局部输入状态
随书的code名称是:LISLabCSDN的下载里有这本书.
http://download.csdn.net/source/226707
帮看看.