为什么我使用SetForegroundWindow(handle) 无法将窗体拉到前台来

kill_net 2003-02-05 10:46:47
如题
...全文
2555 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddeng 2003-02-10
  • 打赏
  • 举报
回复
试试BringToFront吧
kill_net 2003-02-09
  • 打赏
  • 举报
回复
楼上的这个方法,不就是把窗体设置成在最上端,然后在取消吗?我试过了,
好象 不行的也
jishiping 2003-02-09
  • 打赏
  • 举报
回复
"不就是把窗体设置成在最上端,然后再取消吗?"
后面还有一个SetForegroundWindow啊。我的程序就是这样用的,没有发现问题。
jishiping 2003-02-08
  • 打赏
  • 举报
回复
如果窗口的属性FormStyle不是fsStayOnTop,可以用下面的函数代码实现:
void SetForegroundWin(HWND hWnd)
{
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
SetForegroundWindow(hWnd);
}
  • 打赏
  • 举报
回复
这个问题已经困扰我好长时间了。
我只有这个办法,因为以我的能力研究,只有这个方法可行,但是这个“另外一个.exe”文件可以是你这个主 .exe 文件本身!也就是说,你的程序可以只有一个 .exe 文件,通过修改你的 WinMain() 主函数可实现!让你的 .exe 文件的第二个实例激活你的第一个实例窗口,拉到最前面,然后第二个实例自动退出,不作任何其他处理,包括初始化 Application 和主窗体!
kill_net 2003-02-08
  • 打赏
  • 举报
回复
我真服了,楼上的这位兄弟,你就不能用一些比较简单的方法
  • 打赏
  • 举报
回复
需要拉到最前面时, 在你的钩子里可以 PostMessage 自定义消息到主窗体, 主窗体得到你的自定义消息, 在这个消息里调用你的另外一个 .exe 文件, 传递要激活的窗体的 handle 为参数.
kill_net 2003-02-07
  • 打赏
  • 举报
回复
楼上的方法不行的,我要实现将窗体激活是我的键盘钩子的一个过程,无法将他加到.exe文件中
ilikeff8 2003-02-06
  • 打赏
  • 举报
回复
BringWindowToTop(HWND);
  • 打赏
  • 举报
回复
可以实现的, 就是借助另外一个 .exe 文件!

我发现一个奇怪的现象: (.exe)自己的窗口大多数情况下用 SetForegroundWindow(handle) 不能置前, 但 handle 是别人(另外一个.exe文件)的窗口句柄, 却百分之百灵!

解决办法: 另编一个 .exe 文件, 主文件通过传递窗口句柄调用这个文件, 这个文件调用 SetForegroundWindow(handle) 把主文件的窗口置前.
astros 2003-02-06
  • 打赏
  • 举报
回复
试试这个:
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT,
0, NULL,
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
SetForegroundWindow(Handle);
huzhangyou 2003-02-05
  • 打赏
  • 举报
回复
在Win98/2000下, SetForegroundWindow并不总是能保证获得焦点,
通常情况下SetForegroundWindow会调用FlashWindowEx来闪烁目标窗口,代表已经切换了窗口,但是这不是我们需要的.网络上有一些顶尖高手使用修改窗口切换的系统规则后,用SetForegroundWindow切换到其他进程的窗口,但是现在,我们有了UNDOCUMENTED的另外一个USER32函数:
SwitchToThisWindow(...);
来完成这项工作.
那么原型是怎么的呢? 下面就来揭晓了......
void WINAPI SwitchToThisWindow (
HWND hWnd, // Handle to the window that should be activated
BOOL bRestore // Restore the window if it is minimized
);
由于没有原型和库,我们在使用时通常用动态联接法.
typedef void (WINAPI *PROCSWITCHTOTHISWINDOW) (HWND, BOOL);
PROCSWITCHTOTHISWINDOW SwitchToThisWindow;
HMODULE hUser32 = GetModuleHandle("user32");
SwitchToThisWindow = (PROCSWITCHTOTHISWINDOW)GetProcAddress(hUser32, "SwitchToThisWindow");
这样,我们的任务就完成了.


以前jsp有一段代码刚好是这个功能的
你可以自己找以下

1,221

社区成员

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

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