どんな状態からでも必ず画面に表示しなければならない処理があって
そのときスクリーンセーバーを止める必要があるのですが
どうしても止まりません。
実験用にスクリーンセーバーを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です。
どうかおねがいします。
こちらを参照してください。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=047479
原因がわかりました。
スクリーンセーバーがWindows付属の3D系のタイプだと
どんなことをしても止まらないですね。
3D系以外を使用すると思い通りに動きました。
3D系のスクリーンセーバーは止められないのですか?
プロセス一覧を取得して、その中から .scrを探し、TerminateProcessなどで終了させればよろしいかと思います。
ただ、95,NT4と、98,2000,XPでプロセス一覧の取得方法が違うので注意。
http://support.microsoft.com/default.aspx?scid=kb;ja;175030
やはりプロセス一覧からの終了しかなさそうですね。
ありがとうございました。