F fish007 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #1 我手头的软件要求运行屏幕保护程序,同时要监视外部设备,一接收到外设的有效数据,<br>就立即终止屏幕保护,弹出用户操作窗口,问题是如何用程序终止屏幕保护?
E eguy Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-26 #2 WINDOWS在启动屏幕保护前会向已激活的程序发送<br>一个WM_SYSCOMMAND消息,并将该消息的WPARAM参数设置为SC_SCREENSAVE。<br>利用C++ BUILDER中的TApplication类的OnMessage事件来处理WINDOWS发来的这条消息,<br>如果在接收到的消息后将handled参数设为true,<br>这个响应的消息值就可以阻止屏幕保护运行。 <br>---- 在C++ BUILDER 4.0的过程如下<br>---- 1、在程序头文件unit1.h中对成员函数ProcessMessage的声明加到TForm1的定义中。<br> class TForm1 : public TForm<br>{<br> private: // User declarations<br> void __fastcall ProcessMessage<br> (TMsg &message,bool &handled);<br> public: // User declarations<br> __fastcall TForm1(TComponent* Owner);<br> };<br>---- 2、在unit1.cpp中,在程序中增加ProcessMessage函数语句: <br>void __fastcall TForm1:rocessMessage<br>(TMsg &message,bool &handled)<br>{<br> if(message.message==WM_SYSCOMMAND<br> &&message.wParam==SC_SCREENSAVE)<br> {<br> handled=true;<br> }<br>}<br>---- 3、在TForm1的构造函数增加以下代码: <br>__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)<br>{<br> Application->OnMessage=ProcessMessage;<br>}<br>在Delphi中类似。<br><br><br>
WINDOWS在启动屏幕保护前会向已激活的程序发送<br>一个WM_SYSCOMMAND消息,并将该消息的WPARAM参数设置为SC_SCREENSAVE。<br>利用C++ BUILDER中的TApplication类的OnMessage事件来处理WINDOWS发来的这条消息,<br>如果在接收到的消息后将handled参数设为true,<br>这个响应的消息值就可以阻止屏幕保护运行。 <br>---- 在C++ BUILDER 4.0的过程如下<br>---- 1、在程序头文件unit1.h中对成员函数ProcessMessage的声明加到TForm1的定义中。<br> class TForm1 : public TForm<br>{<br> private: // User declarations<br> void __fastcall ProcessMessage<br> (TMsg &message,bool &handled);<br> public: // User declarations<br> __fastcall TForm1(TComponent* Owner);<br> };<br>---- 2、在unit1.cpp中,在程序中增加ProcessMessage函数语句: <br>void __fastcall TForm1:rocessMessage<br>(TMsg &message,bool &handled)<br>{<br> if(message.message==WM_SYSCOMMAND<br> &&message.wParam==SC_SCREENSAVE)<br> {<br> handled=true;<br> }<br>}<br>---- 3、在TForm1的构造函数增加以下代码: <br>__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)<br>{<br> Application->OnMessage=ProcessMessage;<br>}<br>在Delphi中类似。<br><br><br>
F fish007 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-27 #3 感谢eguy的答复,不过我的意思是必须运行标准屏幕保护程序(自己制作的宣传内容),<br>然后在一定时候终止该标准屏幕保护程序。
H hhzh426 Unregistered / Unconfirmed GUEST, unregistred user! 2000-09-27 #4 在程序中运行*.scr(shellexecute),并取得其句柄,不要时杀之!行吗?
杀 杀大龙 Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-03 #7 可以用虚拟击键的方法,<br><br>但既然宣传是自己制作的,可以找它的句柄,然后关闭之<br><br>在宣传中的project。dpr设置 <br>Application。title := 某字符串。 //这是它的标题<br>关闭时,先用<br> FindWindows(。。);<br> 发送WM_CLOSE消息即可。<br>那就要禁止屏幕保护了 。。
可以用虚拟击键的方法,<br><br>但既然宣传是自己制作的,可以找它的句柄,然后关闭之<br><br>在宣传中的project。dpr设置 <br>Application。title := 某字符串。 //这是它的标题<br>关闭时,先用<br> FindWindows(。。);<br> 发送WM_CLOSE消息即可。<br>那就要禁止屏幕保护了 。。
毛 毛虎林 Unregistered / Unconfirmed GUEST, unregistred user! 2000-10-07 #8 98、2000下只要使用函数SetCursorPos(x,y);即可。<br>NT4,还不知道最简单的方法是什么。<br><br>通过发消息的方法去掉屏幕保护,好像行不通。<br>可能是实际上没有改变Windows的按健计数,用这种方法,屏保关掉之后立刻又重新启动了。
98、2000下只要使用函数SetCursorPos(x,y);即可。<br>NT4,还不知道最简单的方法是什么。<br><br>通过发消息的方法去掉屏幕保护,好像行不通。<br>可能是实际上没有改变Windows的按健计数,用这种方法,屏保关掉之后立刻又重新启动了。