2012年7月1日日曜日

◆スリープ時にiPod装着をチェックする

半年ほど前からiPodシャッフルを使っている。
安くてコンパクトで気に入っているのだが、USBに繋いで充電したままPCをスリープさせてしまうと逆に放電されてしまう。

朝気づくと充電がスッカラカンという事をなんどかやらかして、何かしら対策しないといけないと思い立った。(繋いでいるPCのUSBに依存した現象なのかもしれないが・・・)

スリープイベントを拾ってiPodがつながっていたら警告、って事にすれば良さそうだ。

Get-PSDriveでドライブ情報を取ってきてiPodかどうかを判定すれば良い。
幸い、DescriptionにiPodの名前が入っている。

っと思ったのだが、どうにもこうにもこいつが不思議な動作をする。
Descriptionに名前が入っている時と入っていない時があるのだ。
接続の都度違うとかではなくて、Get-PSDriveを呼ぶ都度?(環境)に違ったりする。
結局法則性がつかめなかったのでGet-PSDriveは諦めて「win32_usbhub」を使うことにした。

イベント自体は以前も使っているので以下と同様にしてみた。
PowerShell: ◆スリープ(Sleep)解除イベントを拾う

</
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032

#requires -version 2.0
#
# Sleep時にiPod接続の監視
#

$iPodString = "Apple Mobile Device USB Driver"
$identifier = "EnteringSuspend"
$query =
 
 
"Select * From Win32_PowerManagementEvent where EventType=4"
Register-WmiEvent -query $query -sourceidentifier $identifier 

try
{
 
While($true
){
   
$newEvent = Wait-Event -SourceIdentifier $identifier
    if(gwmi win32_usbhub | ?{$_.name -eq $iPodString
}){
     
$sam = New-Object -comObject SAPI.SpVoice
      $sam.Speak("i Pod is connecting."
 )
    }
       
   
Get-Event -SourceIdentifier $identifier | Remove-Event
     
  }
}

catch
{
   
Write-Warning "以下のエラーが発生しました"
    $error[0]
}
finally
{
   
#イベントを削除し購読をやめる
    Get-Event $identifier | Remove-Event
    Get-EventSubscriber -sourceidentifier $identifier |
 
     
Unregister-Event
}

警告は音声を使ってみたが、ココらへんは好みに応じて変更すれば良いだろう。

基本的にはUSBメモリーの抜き忘れなどにも使えそうなので用途はありそうだ。

0 件のコメント:

コメントを投稿