在论坛搜索有人回答说:
"激活是从最小化恢复到原来样子,置顶是到其他窗口前面"
测试过程如下:
1 将一个窗口最小化
窗口_激活()和窗口_置顶()都没有反应
2 将一个窗口非最小化置于其他窗口后面
窗口_激活()和窗口_置顶()都可以置当前窗口
3 查看精易的源码
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_当前线程ID | | | | 局_目标线程ID | | | | 局_返回值 | 整数型 | | |
局_当前线程ID = GetCurrentThreadId ()局_目标线程ID = GetWindowThreadProcessId (窗口句柄, 0 )AttachThreadInput (局_目标线程ID, 局_当前线程ID, 真)局_返回值 = SetActiveWindow (窗口句柄 )AttachThreadInput (局_目标线程ID, 局_当前线程ID, 假)返回 (局_返回值 )
4 函数原型:HWND SetActiveWindow(HWND hWnd);
参数: hWnd:将被激活的最顶层窗口。 返回值:若 函数调用成功,则返回原先活动窗口的句柄。若 函数调用失败,则返回值为NULL。若要获得更多 错误信息,可以调用GetLastError函数。 备注:SetActiveWindow函数激活一个窗口,但当应用程序处于后台时,将不激活指定窗口。当应用程序激活窗口时处于前台,则窗口将被放到前台。 若hWnd参数指定的窗口是被调用线程创建的,调用线程的 活动窗口的状态将被设置到hWnd中。否则,调用线程的 活动窗口的状态被设为NULL。 从另一方面讲,SetForegroundWindow 窗口函数激活一个窗口并将其强制为前台的。当应用程序要显示关键错误或需要用户立即注意的信息时,应只能调用SetForegroundWindow函数。 使用 AttachThreadInput函数可将一个线程的输入处理连接到其他线程。这使得调用SetActiveWindow函数的 线程可以激活与其他线程的 消息队列相关的窗口。 速查:Windows NT:3.1及以上版本;Window 5 函数原型:B00L BringWindowToTop(HWND hWnd); 函数功能:该函数将指定的窗口设置到Z序的顶部。如果窗口为顶层窗口,则该窗口被激活;如果窗口为子窗口,则相应的顶级父窗口被激活。 参数: hWnd: 设置到Z序的顶部的 窗口句柄。 返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多 错误信息,请调用GetLastError函数。 备注:使用BringWindowToTop函数显示出被其他窗口部分或全部遮盖的窗口。 调用这个函数类似于调用SetWindowPos函数来改变窗口在Z序中的位置,但是BringWindowToTop函数并不能使一个窗口成为前台窗口。 如果应用程序不在前台中而想设置在前台中,可以调用SetForegroundWindow函数。 这个函数也许能随同子窗口使用。函数对一个特定的输入线程来说是“本地的”——换言之,倘若某窗口并非前台应用程序的一部分,那么一旦随同该窗口调用本函数,仍会将窗口带至它自己那个应用程序的窗口列表顶部。但是,不会同时使那个应用成为前台应用程序。这意味着在调用了本函数后,窗口仍会保持隐藏状态 6 还是没搞清楚区别在哪里,看来一般情况用置顶吧,?
|