单位从保密的高度出发,让每个人都要设统一的屏保,时间5分钟,恢复需要密码,并且密码为强口令,这样带来了很大的麻烦,于是想,自己写个小程序,尽管网上有现成的小软件下。
思路:Windows在启动屏幕保护程序前会向当前激活的应用程序发WM_SYSCOMMAND消息,其中wParam参数指定了即将执行的系统命令类型,值SC_SCREENSAVE表明这个消息为屏幕保护启动,拦截这个消息并return即可阻止启动屏幕保护。
编程工具:以前都是使用Delphi,但是单位都是用C,自己也用C吧,又确实是喜欢Delphi的可视化,于是选用C++ Builder,
主要实现代码:void __fastcall TForm1::CaptureMessage(tagMSG &Msg,bool &Handled)
{
if(Msg.message= =WM_SYSCOMMAND && Msg.wParam= =SC_SCREENSAVE)
Handled=true; //阻止屏幕保护的启动
else
Handled=false; //进行该消息的缺省处理
}
后记:现在工作是硬件,课余时间从现实出发,自己通过网络的学习,解决自己遇到的事情,乐哉,高手莫笑。
继续:
这个小东东在状态栏也不好啊,属于违规的,于是最小化到托盘,采用TrayIcon1组件,按窗口的最小化,程序就到托盘了,这里在刚才那个click事件中加入
SendMessage(Form1->Handle, WM_SYSCOMMAND, SC_MINIMIZE, NULL); 这样到托盘。
但是问题出现了,现在再也无法截获WM_SYSCOMMAND消息,不能阻止屏保了。
马兄提示用试试SystemParametersInfo来禁用屏幕保护。搞定
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,TRUE,0,0);//恢复可以屏保
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,FALSE,0,0);、、禁止屏保。
Edited by 彳亍 on 2008-07-03





