发现BCB中的一个BUG!!!!对于API的使用出现的怪事!UP有分!

leeseon 2002-07-12 07:31:09
在BCB中我用CreateProcess开一个进程打开一个程序,然后想将程序的焦点也就ForegroundWindow设回为开个程序的主程序,但是用SetForegroudWindow后不能执行,只是程序在任务栏中开始闪烁,不能成为当前被激活的程序。

而将SetForegroundWindow(用另一个程序的窗口句柄做参数,那一个程序就自己到了前台。

而且我试过了主FORM的Handle,Appliction的Handle,并且自己FindWindowEx(自己的句柄)都得到同样的效果那就是只在任务栏里闪烁,并不能自己到前台,

谁能解释一下是为什么,有解决办的的最好!
...全文
78 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
leeseon 2002-07-15
  • 打赏
  • 举报
回复
好吧,这个也是通过最近的测试才明白的,唉,还是有机会好好的看一下VCL的源码!

等一下结帐,各位不用急!
hbxtx 2002-07-13
  • 打赏
  • 举报
回复
up
My_Love 2002-07-13
  • 打赏
  • 举报
回复
可能少有人知道
Application->Handle
并不是mainform Handle
搞懂这个不应再有问题
/////////////////////
leeseon 2002-07-13
  • 打赏
  • 举报
回复
的确!算不了什么!

可是,为什么?

我是真的想知道!!
leeseon 2002-07-13
  • 打赏
  • 举报
回复
算不了什么!的确!

但是为什么呢?我真的很想明白!
lownr 2002-07-13
  • 打赏
  • 举报
回复
SetActiveWindow(hwndApp);
SetWindowPos(hwndApp, HWND_TOP, 0, 0, 0, 0,
SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);
SetForegroundWindow(hwndApp);
yansea 2002-07-13
  • 打赏
  • 举报
回复
好象delphi也是这样的~~算不了什么的。
yansea 2002-07-13
  • 打赏
  • 举报
回复
好象delphi也是这样的~~算不了什么的。
sun9989 2002-07-13
  • 打赏
  • 举报
回复
up
leeseon 2002-07-13
  • 打赏
  • 举报
回复
但是我用主FORM的句柄也没有变化,

而且我用BCB做了一个简单的程序,然后用FindWindow它的Title的句柄,然后用SetForegroundWindow也没有任何问题,只是自己的主程序没有用,用什么句柄都不行,真的不明白!

leeseon 2002-07-13
  • 打赏
  • 举报
回复
cdws222(www.teatool.com)的加回复:

自已工程在Windows中的代表是一个看不见的Application窗体,这是工程中的所有窗体的祖先窗体,如果你将工程中的窗体提前,那么Windows就会将Application这个窗体提前,而这个窗体是没有焦点的,也就是说你工程里的焦点没有在这里,而且也不能在这里,但你想把它提前,所以任务栏上就闪了
bcb_fans 2002-07-12
  • 打赏
  • 举报
回复
CreateProcess是Windows的内部函数,它当然懂得如何切换!我们普通的程序员就只能通过这种所谓的技巧来办到了,唉!无奈中...
leeseon 2002-07-12
  • 打赏
  • 举报
回复
to: BCB_FANS(四大名捕之追杀令)

但是用这个API调用其它的程序窗口句柄都没有什么问题,这就有一点奇怪了!
bcb_fans 2002-07-12
  • 打赏
  • 举报
回复
这不是VCL的事,而是Windows内部的窗口调度规则引起的。
leeseon 2002-07-12
  • 打赏
  • 举报
回复
还是有问题,不过我现在也想到了一个比较有趣的做法,我先让前台的最小化,用的时间再最大化。居然也能行,搞笑!

不过这个问题我还想探讨一下,看一下VCL中究竟搞了一些什么处理!
bcb_fans 2002-07-12
  • 打赏
  • 举报
回复
你在VC++版问的问题,说得很好吗!怎么在这里提问却说得不明不白:D
bcb_fans 2002-07-12
  • 打赏
  • 举报
回复
不好意思,刚才下线了。
-------------------------------
我在2000下进行测试,没有任何问题。

在98下出问题,那就不好说在哪里了,先改一下代码看看:

void __fastcall TForm1::SwitchToForeground(HWND hTargetWnd)
{
SetForegroundWindow(hTargetWnd);//增加这行语句,看看是不是行了
//........
}
leeseon 2002-07-12
  • 打赏
  • 举报
回复
自已工程里的窗体不行,什么意思能说得详细一点吗?
cdws222 2002-07-12
  • 打赏
  • 举报
回复
自已工程里的窗体不行
leeseon 2002-07-12
  • 打赏
  • 举报
回复
模拟MOUSE,为什么我没有想到,的确是一个好的主意

谢谢BCB_FANS(四大名捕之追杀令),你的程序的确能用,但是有一点儿问题,有时候出来了,但是标题栏,仍然是灰的没有激活,而且还是在标题栏是闪烁,不过也不是每次都这样,能不能告诉是为什么?

加载更多回复(11)

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧