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

解決


エーミール  2002-06-15 22:51:45  No: 104377

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


Say  2002-06-16 02:10:36  No: 104378

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


蜻蛉  URL  2002-06-16 02:18:19  No: 104379

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

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

で、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-16 02:20:22  No: 104380

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

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

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


とらきち  2002-06-16 02:52:36  No: 104381

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

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


たかみちえ  URL  2002-06-16 06:49:47  No: 104382

ベクターにそういうサンプルがあったような気が…します。
ベクターの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-16 08:42:47  No: 104383

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

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

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

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

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

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

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

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


エーミール  2002-06-18 16:44:53  No: 104384

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


蜻蛉  URL  2002-06-19 02:13:35  No: 104385

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


エーミール  2002-06-21 16:35:24  No: 104386

ありがとうございます。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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