スクリーンセーバーファイル(*.scr)をAPIのShellExecuteでパラメータを付けずに開くと全画面表示でスクリーンセーバーが開始されますが、これをプログラムの画面の一部分で表示するようにしたいのですがどのようにすれば良いでしょうか。(Windows98では、コントロールパネルの「画面」プロパティの中の「スクリーンセーバー」タブにある画面の絵の中でプレビューが行われるのでそれと同じような事をしたいのです)。調べてみるとパラメータに/pを付けるようですが実現方法が良く分かりませんでした。お願いします。
スクリーンセーバー用コンポーネントというものがあるんですけど、
これのヘルプファイルに、役に立ちそうな情報が書かれています。
たぶん、表示させたい部分にあの小さな画面の"ふり"をさせれば、
表示させることができると思います。
http://www.tachibana.ac/
ここにあります。
ShellExecuteを使って開くと、Operation引数がOpenのときには、/Sをつけて実行してしまいます。
.scrの関連づけが原因で、これを.exeにしてやれば、ShellExecuteのParameters引数が有効になります。
# CreateProcessは試していません。.exeに直す必要はないかも。
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;
たかみちえ様、にしの様、そのほかの皆様本当にありがとうございました。CreateProcessとShellExecuteを使った方法両方で試しにやってみます。
ツイート | ![]() |