TaskSwitchXP Alt+Tabでのタスク切り替え

Alt+Tabによるタスク切り替え動作を拡張するアプリケーションです。


同様のアプリケーションににMicrosoft PowerToys for Windows XPのTask Switcherというものがあります。
しばらく前から、このTask Switcherを使っていたのですが、少し動作が重たい気がするのと、Alt+Tabをすばやく押して離す動作で直前のウィンドウにフォーカスが移動しない場合があるのが気になっていました。


そこで、TaskSwitchXPに変更してみました。
動作も軽快で、直前のウィンドウにもすばやく切り替えれるし、すごくいい!!です。


そのほかにもいろいろな機能があるようなので、そのうち試してみたいと思います。


参考

Norton AntiVirus コマンドラインからスキャンを実行する方法

前回は、Symantec Antivirus Corporate Editionでコマンドラインからスキャンを実行する方法を調べました。
今回は、自宅で利用しているNorton AntiVirus 2006でコマンドラインからスキャンを実行する方法を調べてみました。

コマンドラインからのスキャンということで、ヘルプにそのものずばりが書いてありました。

NAVW32 [[<パス名>] <オプション>] <パス名>
ドライブ、フォルダ、ファイルまたはそれらの組み合わせをスキャンします。項目を組み合わせてスキャンしたい場合にはスペースで項目を区切ります。パス名を指定する場合にはワイルドカード文字を使います。
/A
A と B を除くすべてのドライブをスキャンします。
/L
A と B を除くすべてのローカルドライブをスキャンします。
/S[+|-]
パス名で指定したすべてのサブフォルダをスキャンします。
/B[+|-]
ブートレコードのスキャンをオン (+) またはオフ (-) にします。たとえば、NAVW32 A: /B または NAVW32 B: /B- と入力します。
/BOOT
すべてのハードディスクドライブのマスターブートレコードとブートレコードをスキャンし、リムーバブルドライブの指定があればそのドライブもスキャンします。
/NORESULTS*1
スキャン結果のレポートを画面に表示しません。
/HEUR:[0|1|2|3]
Bloodhound 感度を設定します。0 の場合は無効になります。

コマンドラインからメモリとファイル参照の感染ファイルを次のようにスキャンすることもできます。

Navw32 /SESCAN
メモリとファイル参照の感染ファイルを排他的にスキャンします。
Navw32 /SE+
オプション設定に関係なくメモリとファイル参照の感染ファイルをスキャンします。
Navw32 /SE-
オプション設定に関係なくメモリとファイル参照の感染ファイルをスキャンしません。


単純に、全ドライブのスキャンを実行するだけなら

> NAVW32 /L

で実行できます。


ただ、スキャンの方法はわかりましたが、スキャンの終了を検出する方法がわかりませんでした。
Corporate Editionのように、イベントログにも記録されないし・・・

*1:Norton Antivirus 2006のHelpでは、/NORESULTとなっているが本来は/NORESULTS

スキャン完了後にシャットダウンする方法(追記)

昨日掲載した、スキャン完了後にシャットダウンするについてですが、実際に昨日実行して帰宅しました。
ところが、今朝出社してみるとスキャンは完了してましたがPCが電源入りっぱなしでした。

どうやら、自分のPCはスクリーンセーバーで”パスワードによる保護”の設定でロックがかかるようにしているのですが、ロックがかかっている状態では、うまくシャットダウンできないようです。

Call ObjOperatingSystem.Win32Shutdown(PowerOff)

この部分を

Call ObjOperatingSystem.Win32Shutdown(ForcedPowerOff)

にするとロック中でもシャットダウンすることができます。

ちなみに、調べている最中にスクリプトによるロックを実行する方法も見つけました。

デフラグをコマンドラインから実行する

コマンドラインからウィルススキャンを実行する方法を紹介しましたが、さらにデフラグコマンドラインから実行する方法を。

Windows XPなら標準で defragコマンドと言うのがあるのでそれを使えば問題ありません。
参考
http://itpro.nikkeibp.co.jp/article/Windows/20051025/223346/

じゃー、Windows 2000でもdefragコマンド使えばいいやん(上記のサイトにも利用環境のところにあるし)

と思っていたら、Windows 2000では実行できませんでした。

そこで調べていると、Contigというデフラグ用のツールがあるようです。

参考
http://www.ringolab.com/note/daiya/archives/004791.html

ファイル単位や、フォルダ単位でのデフラグができ、何よりWindows 2000で実行できます。

これは便利!!

スキャン完了後にシャットダウンする

以上のようなことをふまえて作成したのがこちら↓

Option Explicit

Call StartScan

If WaitForEndScan Then
    Call Shutdown
End If


' ウィルススキャンを実行する
Sub StartScan
    Dim WShell
    
    Set WShell = WScript.CreateObject("WScript.Shell")
    
    WShell.CurrentDirectory = "D:\Download\vpscan\"
    Call WShell.Run("vpscan.exe /ini",,True)
End Sub

' ウィルススキャンの終了まで待機する
Function WaitForEndScan
    Dim objWMIService
    Dim colMonitoredEvents
    Dim objLatestEvent
    
    Set objWMIService = _
        GetObject("winmgmts:{impersonationLevel=impersonate, (Security)}!\\.\root\cimv2") 
    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
        ("Select * from __instancecreationevent where TargetInstance isa 'Win32_NTLogEvent' " _
        & "and (TargetInstance.EventCode = '2' OR TargetInstance.EventCode = '21')") 
    
    Set objLatestEvent = colMonitoredEvents.NextEvent
    ' EventCode=2:スキャン完了
    ' EventCode=21:スキャンキャンセル
    If objLatestEvent.TargetInstance.EventCode = 2 Then
        WaitForEndScan = True
    Else
        WaitForEndScan = False
    End If
    
End Function

' シャットダウン
Sub Shutdown
    Const LogOff = 0            'ログオフ
    Const ForcedLogOff = 4      '強制ログオフ 0 + 4
    Const Shutdown = 1          'シャットダウン
    Const ForcedShutdown = 5    '強制シャットダウン 1 + 4
    Const Reboot = 2            '再起動
    Const ForcedReboot = 6      '強制再起動 2 + 4
    Const PowerOff = 8          '電源断
    Const ForcedPowerOff = 12   '強制電源断 8 + 4
    
    Dim colOperatingSystems
    Dim objOperatingSystem
    
    Set colOperatingSystems = _
    GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * from Win32_OperatingSystem")
    For Each objOperatingSystem in colOperatingSystems
        Call ObjOperatingSystem.Win32Shutdown(PowerOff)
    Next
End Sub

これでスキャンが完了した時点で、シャットダウンが実行される。
また、スキャンをキャンセルした場合は、何もしない。

SAVCEのスキャン終了を待ち受ける方法

vpscanを利用して、コマンドラインからスキャンを利用する方法はわかりました。
しかし、vpscan.exe自体は、RTVSCAN.exe(ウィルススキャンを実行するサービス)を呼び出すだけで、すぐに終了してしまうため下記のようなバッチファイルではうまくいきませんでした。

START /WAIT VPSCAN.EXE /INI

そこで、イベントログに記録されるスキャン完了のログを監視する方法を調べました。

下記のようなVBSriptで可能でした。

Set objWMIService = _
    GetObject("winmgmts:{impersonationLevel=impersonate, (Security)}!\\.\root\cimv2") 
Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
    ("Select * from __instancecreationevent where TargetInstance isa 'Win32_NTLogEvent' and TargetInstance.EventCode = '2' ") 

Set objLatestEvent = colMonitoredEvents.NextEvent 
Wscript.Echo "イベント発生"

(アプリケーションログのイベントID:2が、スキャン完了のログ)

参考:http://www.microsoft.com/japan/technet/scriptcenter/scripts/logs/eventlog/lgevvb17.mspx