スクリーンセーバーを作るには?

解決


エーミール  2002-06-15 13:51:45  No: 104377  IP: [192.*.*.*]

早速ですが質問です。
スクリーンセーバーを作ろうと思い立ったの
ですが、作り方がいまいちよくわかりません。
どなたか教えてください。
お願いします。

編集 削除
Say  2002-06-15 17:10:36  No: 104378  IP: [192.*.*.*]

人に聞く前に、まず自分で探す努力したらいかがでしょう?
Yahooで「スクリーンセーバーの作り方 VB」で
検索するだけでそれっぽいのが ひとやま
見つかるでしょう。

編集 削除
蜻蛉  URL  2002-06-15 17:18:19  No: 104379  IP: [192.*.*.*]

僕も一回作ったのですが、あまりよく覚えてません・・・

まず基本。普通にフォームを作って、ウィンドウの枠を「なし」にします。キャプションはあってもなくてもいいです。

で、Form_Loadか、Sub Main()に、コマンドラインを受け取るキャッチャーを書きます。
これはSelect Case でOKです。

ごめんなさい、渡されるコマンドラインはまた調べておきます。

で、で、API関数を使ってあなたのプログラムがスクリーンセーバーであることをWindowsに認識させます。General Declationsに記述するのはこれです↓

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

Const SPI_SETSCREENSAVEACTIVE = 17
Const SPIF_UPDATEINIFILE = &H1
Const SPIF_SENDWININICHANGE = &H2

設定コード↓
Dim Ret As Integer
Ret = SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, Flag, ByVal 0, SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)
  
If Ret = 0 Then
     'error
         End
End If

宣言のところは改行なしか、_を適当に入れてください。

編集 削除
蜻蛉  URL  2002-06-15 17:20:22  No: 104380  IP: [192.*.*.*]

っていうか書き込んでから思ったんですけど、VBでスクリーンセーバー
というのはやめた方がいいように思います。

クライアントにおいてもVB6ランタイムを導入しなければならないし、
なによりも起動と反応が遅く、非常に重いです。

Flash,Directorなどを使って作った方が軽くて汎用性があると思います。

編集 削除
とらきち  2002-06-15 17:52:36  No: 104381  IP: [192.*.*.*]

スクリーンセイバーといっても拡張子が.scrのただの実行ファイルですので
実はメモ帳とかの全然関係ないアプリケーションの拡張子変えて
Windows/Systemディレクトリにつっこんで設定しておくと
時間が経過した時点でメモ帳を起動してくれます(笑)。

DirectXをつかって動画Gifかなんかをフルスクリーンで
表示させるだけというのどうでしょうか。
画像ができてれば5分でできます。

編集 削除
たかみちえ  URL  2002-06-15 21:49:47  No: 104382  IP: [192.*.*.*]

ベクターにそういうサンプルがあったような気が…します。
ベクターのVBディレクトリを、"スクリーンセーバー"で検索してみてください。

  スクリーンセーバーを作るなら、HSPというのもありますけど…、
HSP自体の基本機能はすごく少ないんですけど、スクリーンセーバーとか、ゲームとか、Windowsアプリケーションに無縁のものを作るのには向いてると思います。

  ちなみに、スクリーンセーバーに送られるコマンドラインは以下の通り。
OSによって微妙に違うみたいです。
(3文字目にあるかもしれない)コロン:の存在は無視、表示するべきハンドルは自分で調べる。
とすれば、結構どこでも動くものが作りやすいかもしれません。

> Windows2000
> 通常起動…/s
> 右ポップアップ テスト(E)…/S
> 右ポップアップ 構成(O)…なし
> 画面のプロパティ 縮小プレビュー…/p hwnd
> 画面のプロパティ 設定(T)…/c:hwnd
> 画面のプロパティ プレビュー(V)…/s

> ・WindowsNT4.0
> 通常起動…/s
> 右ポップアップ テスト(E)…/S
> 右ポップアップ 構成(O)…なし
> 画面のプロパティ 縮小プレビュー…/p hwnd
> 画面のプロパティ 設定(T)…/c:hwnd
> 画面のプロパティ プレビュー(V)…/s

> ・WindowsME
> 通常起動…/s
> 右ポップアップ テスト(E)…/S
> 右ポップアップ 構成(O)…なし
> 画面のプロパティ 縮小プレビュー…/p hwnd
> 画面のプロパティ 設定(T)…/c:hwnd
> 画面のプロパティ プレビュー(V)…/s
> 画面のプロパティ 変更(C)…/a:hwnd

> ・Windows98
> 通常起動…/s
> 右ポップアップ テスト(E)…/S
> 右ポップアップ 構成(O)…なし
> 画面のプロパティ 縮小プレビュー…/p hwnd
> 画面のプロパティ 設定(T)…/c:hwnd
> 画面のプロパティ プレビュー(V)…/s
> 画面のプロパティ 変更(C)…/a:hwnd

> ・Windows95
> 通常起動…/s
> 右ポップアップ テスト(E)…/S
> 右ポップアップ 構成(O)…なし
> 画面のプロパティ 縮小プレビュー…/p hwnd
> 画面のプロパティ 設定(T)…/c
> 画面のプロパティ プレビュー(V)…/s
> 画面のプロパティ 変更(C)…/a:hwnd

  あるソフトのヘルプより引用
掲示板に書くにはあまりにも読みづらいため、一部修正しました。
というか、これDelphiのコンポーネントです^^;
なので、Delphiで作るというのも手かもしれません。
Personal版でも使えるし。

編集 削除
とらきち  2002-06-15 23:42:47  No: 104383  IP: [192.*.*.*]

ちょっといい加減すぎたので補足を

マウスかキーボードの入力で終了
(MouseMove,MouseDown,KeyDown)

DirectX何それ?という場合は
Form1.BorderStyle = 0
Form1.WindowState = 2

UNISYS社が嫌いな人はTimerコントロールかGetTickCount()で絵を動かす。


本格的なやつをつくるなら

コマンド関数の戻り値からコマンドに渡された引数を取得
(画面のプロパティ等に対応させる場合)
Select CaseかIfでそれぞれのケースに対応させる。

重複をさけるためのトラップ

ShowCursorでマウスポインタを消す。
(Unloadで戻すのを忘れずに)

編集 削除
エーミール  2002-06-18 07:44:53  No: 104384  IP: [192.*.*.*]

分かりました。早速やってみようと思います。

編集 削除
蜻蛉  URL  2002-06-18 17:13:35  No: 104385  IP: [192.*.*.*]

もう一点。
コンパイルするときに[オプション]の
[タイトル]に、[SCRNSAVE:]と打ってからタイトルを入力してください。

編集 削除
エーミール  2002-06-21 07:35:24  No: 104386  IP: [192.*.*.*]

ありがとうございます。

編集 削除