実行中のスクリーンセーバーを止めるには?

解決


take  2004-01-06 17:44:19  No: 6529

どんな状態からでも必ず画面に表示しなければならない処理があって
そのときスクリーンセーバーを止める必要があるのですが
どうしても止まりません。
実験用にスクリーンセーバーを1分起動にし、ボタン降下後1分20秒ほどで実行されるタイマーイベントを作り試しています。
タイマーイベントの中身は
1.マウスを動かして止めてみる
var
  p : TPoint;
  x,y : Integer;
begin
  GetCursorPos(p);
  x := p.x;
  y := p.y;
  x := x - 100;
  y := y - 100;
  SetCursorPos(x,y);
  Application.ProcessMessages;
end;
2.SystemParametersInfoを使用する方法
  SystemParametersInfo (SPI_SETSCREENSAVEACTIVE, LongInt(False),
      nil, SPIF_UPDATEINIFILE);
を試しましたが止まりません。
環境はOSがXpでDelphiは5です。
どうかおねがいします。


にしの  2004-01-06 18:10:13  No: 6530

こちらを参照してください。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=047479


take  2004-01-06 18:45:09  No: 6531

原因がわかりました。
スクリーンセーバーがWindows付属の3D系のタイプだと
どんなことをしても止まらないですね。
3D系以外を使用すると思い通りに動きました。

3D系のスクリーンセーバーは止められないのですか?


にしの  2004-01-06 20:10:28  No: 6532

プロセス一覧を取得して、その中から .scrを探し、TerminateProcessなどで終了させればよろしいかと思います。
ただ、95,NT4と、98,2000,XPでプロセス一覧の取得方法が違うので注意。
http://support.microsoft.com/default.aspx?scid=kb;ja;175030


take  2004-01-06 20:44:16  No: 6533

やはりプロセス一覧からの終了しかなさそうですね。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加