VB6.0でスクリーンセーバーを作る方法 - 基礎編

◆概要

このページは、Visual Basic 6.0でスクリーンセーバーを作る方法について記載しています。


この例では、基礎編ですので単に黒いブランク画面を表示しますが、スクリーンセーバーとして動作します。
パスワードモード、設定モード、プレビューモードは非対応です。

◆Step By Step

  1. Visual Basic 6.0.を起動します。
  2. ファイルメニューから、「新しいプロジェクト」をクリック。
  3. 新しいプロジェクトダイアログボックスで、標準EXEをクックし、OKボタンをクリック。デフォルトのフォームが作成されます。
  4. フォームのプロパティを次のように設定します。
プロパティ 設定値
オブジェクト名 frmSaver
ControlBox False
BorderStyle 0-なし
KeyPreview True
ShowInTaskBar False
  1. プロジェクトメニューをクリックし、Project1のプロパティをクリックします。
  2. [Project1-プロジェクトプロパティ]ダイアログボックスの[全般]タブをクリックします。
  3. [プロジェクト名(N)]に ScreenSaver と入力し、[スタートアップの設定(S)]ドロップダウンリストで Sub Main を選択したら[OK]ボタンをクリックします。
プロジェクトプロパティ
  1. プロジェクトメニューから、[標準モジュールの追加]をクリックします。
  2. [標準モジュールの追加]ダイアログボックスで、[開く]ボタンをクリックします。
    デフォルトでは、Module1が作られます。
  3. コードウィンドウに次のコードを貼り付けます。
Option Explicit

'マウスポインタを隠したり表示したりするためのAPIを宣言します。
Public Declare Function ShowCursor _
Lib "user32" ( _
ByVal bShow As Long _
) As Long

'スクリーンセーバーを TOPMOST windowにするためのAPIを宣言します。
Public Declare Function SetWindowPos Lib "user32" ( _
            ByVal h&, _
            ByVal hb&, _
            ByVal X&, _
            ByVal Y&, _
            ByVal cx&, _
            ByVal cy&, _
            ByVal f& _
            ) As Integer
'SetWindowPos[API]で使用する定数
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = 1
Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Public Const HWND_TOPMOST = -1

'システムに通知するためのAPIを宣言します。
Public Declare Function SystemParametersInfo Lib "user32" Alias _
            "SystemParametersInfoA" ( _
            ByVal uAction As Long, _
            ByVal uParam As Long, _
            lpvParam As Any, _
            ByVal fuWinIni As Long _
            ) As Long
'SystemParametersInfo[API]で使用する定数
Public Const SPI_SCREENSAVERRUNNING = 97&


'変数の宣言
Public strStartType As String   '起動判別パラメータ
Public tmplng&                  'SystemParametersInfoで使用する変数
Public nMouseMoves%             'マウスの移動量

Private Sub Main()
    'Mainプロシージャからスクリーンセーバーをスタートさせます。
    'そうすることで、コマンドラインパラメータに基づき、適切なフォーム
    'をロードします。

    '起動時のコマンドパラメータ判断
    '最初"/"を除いた部分を取り出し大文字に変換(大文字でも小文字でも対処するため)
    strStartType = UCase(Mid(Command, 2, 1))
    
    If strStartType = "" Then
        'ユーザーが.scrファイルを右クリックして、[構成]を選んだときは
        '設定モード
        strStartType = "C"
    End If
    'パラメータの種類により処理分岐
    Select Case strStartType
        Case "A"
            'パスワード設定モードの処理
            'ここではノンサポート
            Exit Sub
        Case "C"
            '設定モードの処理
            'ここではノンサポート
            Exit Sub
        Case "P"
            'プレビューモードの処理
            'ここではノンサポート
            Exit Sub
        Case "S"
            '通常モードの処理(スクリーンセーバー起動)
            frmSaver.Show
        Case Else
            'パラメーター異常のとき
            Exit Sub
    End Select
    
End Sub
  1. プロジェクトエクスプローラで、frmSaverを右クリックしてショートメニューを表示させ、[コードの表示(O)]をクリックします。
  2. コードウィンドウで次のコードを貼り付けます。
Option Explicit

Private Sub Form_Click()
'マウスでクリックされたときの処理
    Unload Me
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
'キーボードが押された時の処理
    Unload Me
End Sub

Private Sub Form_Load()
    
    'スクリーンセーバーを TOPMOST windowにする(タスクバーやその他を覆う)
    tmplng = SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
    
    'フォームでスクリーンを覆う(最大化)
    Move 0, 0, Screen.Width, Screen.Height
    
    'フォームの設定
    With Me
        .BackColor = vbBlack    '背景色を黒に設定
    End With
    
    'Microsoft Windows 2000/Xp/Vistaでは,パスワードプロテクトされていないとき、
    '最小サイズ(minimized)でスタートしてしまう。それを回避するための一行
    Me.WindowState = vbNormal
    
    'このアプリケーションがスクリーンセーバーであることをシステムに通知する。
    'これはWindows 95とWindows98で CTRL-ALT-DEL キーを無効にする。
    'Windows NT はシステムレベルでパスワード保護されたスクリーンセーバーを
    '取り扱うので、CTRL-ALT-DELキーの組み合わせは使用不能にすることができない。
    tmplng = SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1&, 0&, 0&)

    'マウスカーソルを消す
    Do
    Loop Until ShowCursor(False) < -5

End Sub

Private Sub Form_MouseDown(Button As Integer, _
        Shift As Integer, X As Single, Y As Single)
    'マウスがクリックされたとき終了する
    Unload Me
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _
                                        X As Single, Y As Single)
    'マウスが動いたときの処理

    Static nTimeDelay&
    nMouseMoves = nMouseMoves + 1

    'スクリーンセーバーがスタートした時、
    '1回はMouseMoveイベントを無視しなければならない。
    '値をより大きくすると感度が変わる。
    If nMouseMoves = 6 Then
         '終了
         Unload Me
    End If

    'マウスが動き始めた時から10秒以上が経過したら、カウンターをリセット
    If nTimeDelay = 0 Then
        nTimeDelay = Timer
    ElseIf Timer - nTimeDelay > 10 Then
        nTimeDelay = 0
        nMouseMoves = 0
    End If

End Sub

Private Sub Form_Unload(Cancel As Integer)
    'マウスカーソルを表示する
    Do
    Loop Until ShowCursor(True) > 5
    
    'CTRL-ALT-DEL キーが無効のときは、それを有効にする。
    tmplng = SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0&, 0&, 0&)

End Sub
  1. ファイルメニューから、[ScreenSaver.exeの作成]をクリックします。
  2. [実行可能ファイルの作成]ダイアログボックスで、ファイル名をScreenSaver.scrに修正します。拡張子scrは、このファイルがスクリーンセーバーであることを示します。
  3. 作成した、ScreenSaver.scrファイルを、Windowsフォルダー(Windows NTとWndows2000、Windows Xp,Windows Vistaでは、Windowsフォルダの中のSystem32フォルダー)にコピーします。,
  4. これで、ScreenSaver スクリーンセーバーがコンピュータで利用できるようになりました。


▼ページトップへ