在OnKillFocus中运用相关函数实现强制置顶

突发奇想,想要制作一个类似于windows开机密码的界面,可以实现开机自启并在其中输入密码时实现自己想要的炫酷效果

既然是开机密码,肯定不能让人不输密码就随意进入。除了设置了开机自启要输入密码才会关掉程序去掉标题栏全屏化,并且用了低级钩子屏蔽了系统按键,还实现了自己想要的开机时的动画效果,但是还有一个问题,就是程序必须要强制置顶

如果不强制置顶首先会因为各种原因失去焦点,用任务管理器也可以关掉程序,本来想简单的用SetWindowPos,HWND_TOPMOST实现,但是这样虽然也会一直置顶没办法切出去,但是总是会失去焦点,而且要是有其他一样是用HWND_TOPMOST的程序,还是可能被覆盖

于是查阅了解到通过

SetForegroundWindow(m_hWnd);//函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口
SetFocus(m_hWnd);//将键盘焦点设置为指定窗口

即可重新获取焦点
为了能够最先获得消息,通过

AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(), NULL), GetCurrentThreadId(), TRUE);
//这个函数中将当前应用程序中的当前线程连接到最前端的窗口中,使得输入的消息会最先本分发到当前的线程中。
AttachThreadInput(GetWindowThreadProcessId(::GetForegroundWindow(), NULL), GetCurrentThreadId(), FALSE);

即可优先获得焦点
然后就是函数使用的时机,本来经过查阅了解WM_ACTVITE消息会发给激活与非活的窗口,wParam对应WA_I

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值