スクリーンセーバーのプレビューを小さな画面の中に表示するには?

解決


GREEN  2002-08-15 01:14:16  No: 1270

スクリーンセーバーファイル(*.scr)をAPIのShellExecuteでパラメータを付けずに開くと全画面表示でスクリーンセーバーが開始されますが、これをプログラムの画面の一部分で表示するようにしたいのですがどのようにすれば良いでしょうか。(Windows98では、コントロールパネルの「画面」プロパティの中の「スクリーンセーバー」タブにある画面の絵の中でプレビューが行われるのでそれと同じような事をしたいのです)。調べてみるとパラメータに/pを付けるようですが実現方法が良く分かりませんでした。お願いします。


たかみちえ  URL  2002-08-15 07:33:53  No: 1271

スクリーンセーバー用コンポーネントというものがあるんですけど、
これのヘルプファイルに、役に立ちそうな情報が書かれています。
  たぶん、表示させたい部分にあの小さな画面の"ふり"をさせれば、
表示させることができると思います。

  http://www.tachibana.ac/
ここにあります。


にしの  2002-08-15 09:46:07  No: 1272

ShellExecuteを使って開くと、Operation引数がOpenのときには、/Sをつけて実行してしまいます。
.scrの関連づけが原因で、これを.exeにしてやれば、ShellExecuteのParameters引数が有効になります。
# CreateProcessは試していません。.exeに直す必要はないかも。


にしの  2002-08-15 10:03:21  No: 1273

CreateProcessでできました。
プロセスの管理は忘れずに。scrを終了せずに、アプリだけ終了すると、scrのプロセスがデーモン化します。

ScreenSaverNameに、起動したいスクリーンセーバのフルパスを用意。
PreviewPanelに、プレビューを表示。

var
  Si: TStartupInfo;
  Pi: TProcessInformation;
begin
  { 新しいプロセスを作成 }
  GetStartupInfo(Si);
  CreateProcess(nil, PChar(ScreenSaverName + ' /P ' + IntToStr(PreviewPanel.Handle)), nil, nil, False,
                     CREATE_DEFAULT_ERROR_MODE, nil,nil, Si, Pi);
end;


GREEN  2002-08-16 22:24:45  No: 1274

たかみちえ様、にしの様、そのほかの皆様本当にありがとうございました。CreateProcessとShellExecuteを使った方法両方で試しにやってみます。


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








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