web-dev-qa-db-ja.com

Windows 7でカスタムスクリーンセーバーを作成する方法-時間と計算されたテキストを使用して?

私は12時間交代で働いており、表示されるスクリーンセーバーを自分で作りたいと思っています。

「$ timeで家に帰る」

どこ $timeは、現在のシフト終了-現在の時刻です。

このようなことは可能ですか?

2
Patryk

このVBScriptは、シフトが終了するまでの残り時間で3Dテキストスクリーンセーバーテキストを自動的に更新します。次のテキストをpdateScreensaver.vbsというファイルに保存し、行をFINISH_TIMEで変更して正しい終了時刻にします。

Option Explicit
'
' Simple vbscript to update the 3D Text screensaver with
' the number of hours left before a shift finishes.
'
' FINISH_TIME is the 24-hour time when you finish. 
Const FINISH_TIME = "21:15:00"
' REGISTRY_KEY is the key to update with the time. This will be
' different if you aren't using the 3D text screensaver.
Const REGISTRY_KEY = "HKCU\Software\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d\DisplayString"
' You don't need to change anything below here!
' ==============================================================
Dim iHours, iMins, sMessage, sUnit
iMins = DateDiff("n", Now(), FormatDateTime(Now(), 2) & " " & FINISH_TIME)
If iMins < 0 Then
    ' Assuming shift work - so the finish time is tomorrow, not today.
    iMins = DateDiff("n", Now(), FormatDateTime(DateAdd("d", 1, Now()), 2) & " " & FINISH_TIME)
End If
iHours = Int(iMins / 60) : iMins = iMins Mod 60
If iHours > 20 Then
    sMessage = "Shift over!"
Else
    If iHours > 0 Then
        sMessage = iHours
        If iMins > 45 Then
            sMessage = sMessage & Chr(190) & " hours"
        ElseIf iMins > 30 Then
            sMessage = sMessage & Chr(189) & " hours"
        ElseIf iMins > 15 Then
            sMessage = sMessage & Chr(188) & " hours"
        ElseIf iHours > 1 Then
            sMessage = sMessage & " hours"
        Else
            sMessage = sMessage & " hour"
        End If
    Else
        sMessage = sMessage & iMins & " minute"
        If iMins <> 1 Then sMessage = sMessage & "s"
    End If
    sMessage = sMessage & " to go!"
End If
Dim wsh : Set wsh = CreateObject("WScript.Shell")
wsh.RegWrite REGISTRY_KEY, sMessage
Set wsh = Nothing

ファイルをダブルクリックして実行すると、何も起こりません。これはいい。次に、3Dテキストスクリーンセーバーの設定を確認すると、シフトが終了するまでの残り時間が表示されます。

ここで行う必要があるのは、これを15分(またはそれくらい)ごとに実行するようにスケジュールされたタスクを設定することだけです。スクリーンセーバーは、残り時間数で最新の状態に保たれます。

いくつかの注意:

  1. スクリーンセーバーの実行中に時刻が更新されると、次に実行されるまでスクリーンセーバーは更新されないようです。それについては何もできません。
  2. このスクリーンセーバーには20文字の制限があるため、テキストは短くなります。
  3. 別のスクリーンセーバーを使用する場合は、メッセージを含む文字列がレジストリのどこに格納されているかを調べ、その場所に一致するように行をREGISTRY_KEYに変更する必要があります。
  4. シフト勤務を想定しているため、シフトが終了するとすぐに残り時間数が24時間に戻り、再びカウントダウンします。これを補うために、ハックを追加して、残り時間が20を超えると、「Shiftover!」と表示されるようにしました。

楽しい。

1
Richard

Windowsスクリーンセーバーは基本的に.scr拡張子の付いた実行可能ファイルであり、そのためのプログラムをCまたはC++で記述し、非常に単純です。

2
HackToHell

Visual Studioを使用する代わりに、AutoITでのスクリプトのような他の方法があることがわかりました。

Webサイトのダウンロードセクションに移動します。メンバーシップも必要ありません。 AutoITアプリケーションのコーダーやコンパイラーなどのダウンロードに移動します。次に、ダウンロードページで検索します。その他のようだと思います。セクションと3ページ目のように、 "ScreenSaver Demo-Matrix Included"というスレッドがあり、ソースコードと例が含まれています。ビルドします。

したがって、コンパイラを開き、スクリプトを挿入し(独自のアイコンを作成することもできます)、[コンパイル]をクリックします(スクリプトが.exeを配置する場所と同じディレクトリにないことを確認してください)。

それをコンパイルすると、あなたが選んだたてがみの.exeファイル、つまりMatrixが作成されます。次に、名前を.scr拡張子に変更し、system32フォルダーにドロップすると、[パーソナライズ]-> [スクリーンセーバー]に移動するとオプションに表示されます。初めて実行したときは気に入らなかったので、オプションをクリックできませんでしたが、再起動後は問題なく動作します。

それがどのようにコンパイルされたかについての情報は、スクリーンセーバーUDFと呼ばれる AutoITのフォーラムのスレッド をチェックしてください。

1
James