怎么用程序自动结束屏保!

cjfzy 2004-10-14 02:40:37
我编了一个程序,收到别的机器传来的消息会相应,并在界面上显示信息;
现在遇到一个问题,机器长期待机,会进入屏保,我的程序弹出的信息不能被看到,
我想在程序收到信息时结束屏保,请问在程序中怎么能结束屏保?
...全文
289 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
masterjames 2004-10-19
  • 打赏
  • 举报
回复
支持以下
bat800 2004-10-18
  • 打赏
  • 举报
回复
是吗,那就动一动吧!!
智商无下限 2004-10-18
  • 打赏
  • 举报
回复
靠!还没揭帖呢?
动一动就行了
我都实验过了!
SetCursorPos(0,0);
sowine 2004-10-18
  • 打赏
  • 举报
回复



那就动一动吧。。。。。



纯冰糖 2004-10-18
  • 打赏
  • 举报
回复
估计得写个消息吧
netrobo 2004-10-18
  • 打赏
  • 举报
回复
luke5678(奇异)解释得很详细。
但我觉得应该还有别的办法吧。
子秦1117 2004-10-18
  • 打赏
  • 举报
回复
动一下鼠标,同意
baointoo1980 2004-10-18
  • 打赏
  • 举报
回复
学习!
ztenv 2004-10-18
  • 打赏
  • 举报
回复
学习ing
beyondtkl 2004-10-15
  • 打赏
  • 举报
回复
呵呵 动一动应该就可以吧
masterjames 2004-10-14
  • 打赏
  • 举报
回复
SetCursorPos(0,0);
智商无下限 2004-10-14
  • 打赏
  • 举报
回复
随便模拟一个鼠标移动的状态就行了,比如
SetCursorPos(0,0);
hottey 2004-10-14
  • 打赏
  • 举报
回复
是啊,随便一个响应事件我想都能够关闭屏保吧:)
pandarus 2004-10-14
  • 打赏
  • 举报
回复
学习
luke5678 2004-10-14
  • 打赏
  • 举报
回复
转贴:

摘要
应用程序在某些时候需要终止一个已启动的屏幕保护程序。在Windows 3.1 或 Windows 95中,传递一个 “WM_CLOSE”的消息给正在运行的屏幕保护窗口就能轻而易举的结束屏保,
如下所示:
PostMessage (GetActiveWindow(), WM_CLOSE, 0, 0L);
然而,Windows NT引入了分离桌面的概念,应用程序和屏幕保护程序能分别在两个桌面上运行。 这使得在Windows NT 或 Windows 2000下关闭屏保要稍难一些 。

更多内容
在Windows NT 或 Windows 2000下,要得到正在运行的屏保窗口的句柄不象在Windows 3.1 和 Windows 95下那样简单。在应用程序中调用GetForegroundWindow() 将返回空值,
因为屏保和应用程序运行在不同的桌面上。同样,调用FindWindow ("WindowsScreenSaverClass", NULL) 来判断屏保是否正在运行也不起作用。
只有先取得屏保程序所在桌面的句柄,列举该桌面上的窗口,之后再传递“WM_CLOSE”的消息给屏保窗口,这样才能关闭屏保。
下面的代码演示了如何做到这一点。需要指出的是如果设置了屏保口令,下面的代码执行时将调出要求输入口令的对话框,提示用户输入口令,这样一来实际上就终止了屏保。
BOOL CALLBACK KillScreenSaverFunc(HWND hwnd, LPARAM lParam)
{
if(IsWindowVisible(hwnd))
PostMessage(hwnd, WM_CLOSE, 0, 0);
return TRUE;
}

HDESK hdesk;

hdesk = OpenDesktop(TEXT("Screen-saver"),
0,
FALSE,
DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
if (hdesk)
{
EnumDesktopWindows(hdesk, KillScreenSaverFunc, 0);
CloseDesktop(hdesk);
}
注意,象上面所说的终止一个正在运行的屏保和完全禁止屏保的执行是不同的,在那种情况下,即使过了指定的等待时间屏保也不会再度运行了。
用下面的方法是很容易做到这一点的:
SystemParametersInfo( SPI_SETSCREENSAVEACTIVE,

FALSE,
0,
SPIF_SENDWININICHANGE
);
这一方法也能成功的关闭正在运行的屏保。不过,你将遇到一个问题,那就是系统将不再启动屏幕保护程序除非用户移动鼠标或按下键盘。
如果你需要再度启动屏保,就必须重新初始化屏保的等待时间。要做到这一点你可以:
调用 SystemParametersInfo( SPI_SETSCREENSAVEACTIVE, TRUE, 0, SPIF_SENDWININICHANGE).
或者
用SetCursorPos()来模拟用户输入。
这两种方法都将促使系统重新启动屏保等待时间计数器。
gujianhua 2004-10-14
  • 打赏
  • 举报
回复
我记得好象是向windows发送一个WM_Active消息就能关闭屏保了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧