none
VB.NETでスクリーンセーバーの開始時刻と終了時刻を記録 RRS feed

  • 質問

  • こんにちは、お世話になります。

    Hey, Scripting Guy! で以下のURLを見つけました。

    http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb06/hey0210.mspx

    VBSでスクリーンセーバーの開始時刻と終了時刻を記録する方法です。

     

    そこで、vb.netで可能か試してみました。

    ほぼそのままでも動きましたが、

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objEventSource = objWMIService.ExecNotificationQuery _
        ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")
    Do While True
        Set objEventObject = objEventSource.NextEvent()
            If Right(objEventObject.TargetInstance.Name, 4) = ".scr" Then
            Select Case objEventObject.Path_.Class
                Case "__InstanceCreationEvent"
                    Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & _
                        " started: " & Now
                Case "__InstanceDeletionEvent"
                    Wscript.Echo "Screensaver " & objEventObject.TargetInstance.Name & _
                        " ended: " & Now
            End Select
        End If
    Loop
    vb.net版はないでしょうか?ご教示の程よろしくお願いいたします。
    また、マウスやキーボードもこういった方法で取れるのでしょうか?
     

     

    2008年3月22日 10:49

回答

  • こんにちは、以下のコードでメモリ使用量が増大してしまい、

    しばらく放置すると、エラー JITエラー?が出でしまい。ループができなくなります。

    なにか解消法ありませんでしょうか?

    ご教授の程よろしくお願致します。 

     

    sub main()

    Dim objWMIService
            Dim objEventSource
            Dim objEventObject

            objWMIService = GetObject("winmgmts:\\.\root\cimv2")
            objEventSource = objWMIService.ExecNotificationQuery _
                ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")
            Do While True
                objEventObject = objEventSource.NextEvent()
                If Right(objEventObject.TargetInstance.Name, 4) = ".scr" Then
                    Select Case objEventObject.Path_.Class
                        Case "__InstanceCreationEvent"
                            'Call conTEST("スクリーンセーバ起動中")

                    'コメントアウトした状態です。
                        Case "__InstanceDeletionEvent"
                            'Call conTEST("スクリーンセーバ停止中")

                                          'コメントアウトした状態です。

                    End Select
                End If
            Loop

    end sub

     

     

     

    2008年3月24日 11:03
  • こんにちは、自己レス。

    メモリの増加については、.NET のバージョン1.1から2.0に変更したら、安定したました。

    以上本件につきましては、解決といたします。

     

    2008年3月25日 3:43

すべての返信

  • こんにちは、以下のコードでメモリ使用量が増大してしまい、

    しばらく放置すると、エラー JITエラー?が出でしまい。ループができなくなります。

    なにか解消法ありませんでしょうか?

    ご教授の程よろしくお願致します。 

     

    sub main()

    Dim objWMIService
            Dim objEventSource
            Dim objEventObject

            objWMIService = GetObject("winmgmts:\\.\root\cimv2")
            objEventSource = objWMIService.ExecNotificationQuery _
                ("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE TargetInstance ISA 'Win32_Process'")
            Do While True
                objEventObject = objEventSource.NextEvent()
                If Right(objEventObject.TargetInstance.Name, 4) = ".scr" Then
                    Select Case objEventObject.Path_.Class
                        Case "__InstanceCreationEvent"
                            'Call conTEST("スクリーンセーバ起動中")

                    'コメントアウトした状態です。
                        Case "__InstanceDeletionEvent"
                            'Call conTEST("スクリーンセーバ停止中")

                                          'コメントアウトした状態です。

                    End Select
                End If
            Loop

    end sub

     

     

     

    2008年3月24日 11:03
  • こんにちは、自己レス。

    メモリの増加については、.NET のバージョン1.1から2.0に変更したら、安定したました。

    以上本件につきましては、解決といたします。

     

    2008年3月25日 3:43