您的位置:首页 > 其它

将窗口置顶的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow

2014-12-05 14:03 399 查看


将窗口置顶的方法:SetWindowPos、AttachThreadInput、SwitchToThisWindow

[转]http://hi.baidu.com/neil_danky/item/f9dca0ca36a79811515058d3

方法一:

使用定时器,然后在定时器响应函数中定时调用,SetWindowPos()函数,第一个参数写HWND_TOPMOST

方法二:

因为2000/XP改变了SetForegroundWindow的执行方式,不允许随便把窗口提前,打扰用户的工作。可以用附加本线程到最前面窗口的线程,从而欺骗windows。

AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),TRUE);

SetForegroundWindow();

SetFocus();

AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(),NULL), GetCurrentThreadId(),FALSE);

方法三:

如何激活指定的窗口事件 ●

我们知道,Windows 9x/2000中SetForegroundWindow函数当用户正在操作其他窗口时是不能强制某个窗口为前景窗口的,而是激活窗口并调用FlashWindowEx函数来通知用户。但是很多实际情况要求将激活窗口的同时将创建这个窗口的线程置为前景状态。碰到这种情况我们可以使用USER32.DLL中的几个未公开API函数。

void SwitchToThisWindow (

HWND hWnd, // 被激活的窗口句柄

BOOL bRestore // 如果被极小化,则恢复窗口

);

必须动态加载这个函数。

typedef void (WINAPI *PROCSWITCHTOTHISWINDOW) (HWND, BOOL);

PROCSWITCHTOTHISWINDOW SwitchToThisWindow;

HMODULE hUser32 = GetModuleHandle("user32");

SwitchToThisWindow = ( PROCSWITCHTOTHISWINDOW)

GetProcAddress(hUser32, "SwitchToThisWindow");

接下来只要用任何现存窗口的句柄调用这个函数即可,第二个参数指定如果窗口极小化,是否恢复其原状态。

SwitchToThisWindow(hWnd, TRUE);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: