// 激活屏保
procedure TForm1.Button1Click(Sender: TObject);
begin
  DefWindowProc(Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
end;

解决方案 »

  1.   

    启动屏保
    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_SCREENSAVE,0); 
      

  2.   

    好的谢谢 屏保出来了但是我调用一个showmessage()来终止怎么不行呢?
      

  3.   

    中止屏保你可以向屏保的窗体发送一个鼠标移动的消息,骗操作系统以为你动了鼠标。
    获取屏保窗体,在Win95/98下用:
     FindWindow('WindowsScreensaverClass', nil);
    在NT/2000/XP下用:
     hd := OpenDesktop('Screen-saver', 0, False, 0);
     CloseDesktop(hd);
      

  4.   

    怎么不行呢? 我把中止屏保的程序写在 timer 里面 ,当时间等于我指定的是间是就终止程序,可是他终止不了屏保程序啊!我用的是win2000操作系统。
      

  5.   

    // 以下代码来自《Delphi 深度历险》,陈宽达
    // 判断屏保是否运行。若KillIt参数为True,并且屏保正在运行,则中止屏保
    function IsScreenSaverRunning(KillIt: Boolean): Boolean;
    var
      hd: HDESK;
      hw: HWND;
      PT: TPoint;
    begin
      Result := False;  if Win32Platform = VER_PLATFORM_WIN32_NT then
      // WinNT
      begin
        hd := OpenDesktop('Screen-saver', 0, False, 0);
        if hd <> 0 then
        begin
          // 正在运行
          Result := True;
          CloseDesktop(hd);
        end
        else
        begin
          // 权限不够
          if GetLastError = ERROR_ACCESS_DENIED then
            Result := True;
        end;
      end
      else
      // Win95/98
      begin
        // 获取屏保程序窗体handle
        hw := FindWindow('WindowsScreenSaverClass', nil);
        if hw <> 0 then
        begin
          // 正在运行
          Result := True;
        end;
      end;  if Result and KillIt then
      begin
        // 获取鼠标指针
        GetCursorPos(PT);
        // 改变鼠标位置
        SetCursorPos(PT.X + 20, PT.Y + 20);
      end;
    end;
      

  6.   

    SendMessage(application.handle,WM_SYSCOMMAND,SC_SCREENSAVE,0);