none
Windows XP でオーディオCDの自動再生をプログラムから制御したい RRS feed

  • 質問

  • お世話になります。

    ■はじめに

    Windowsの自動再生を制御する方法についての質問なのですが、どのフォーラムに投稿するのが良いか分からなかったため、Visual Studio 共通フォーラム に投稿させて貰います。
    この質問にふさわしいフォーラムがありましたら指摘をお願いいたします。


    ■ここから本題です

    Windows XPで自動再生(オーディオCD等の挿入イベントで直接アプリケーションを実行)の制御をプログラムから行いたいと思い、プログラムからレジストリを操作して実現しようと試みましたが、うまく動作させることができませんでした。


    XPで自動再生を制御するためにレジストリの

    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\UserChosenExecuteHandlers

    へ実行されるデバイスとイベントハンドラ、ハンドラのキーを登録しています。
    実行するアプリケーションのハンドラも HKLM に登録済みの状態です。

    私が想定している動作としては、

    1. オーディオCD挿入
    2. オーディオCDの自動再生イベント発生
    3. レジストリを見て、既定の動作があればそのハンドラを実行

    なのですが、レジストリの登録が間違っているのか、不足しているのか思うような動作をしません。

    Autoplay Repair や TweakUI などのツールを使ってみましたが、解決に結びつく有用なヒントを得ることが出来ませんでした。

    何か少しでも良いのでヒントになることなどありましたら、お返事をいただけるとありがたいです。
    よろしくお願いします。

    OS : Windows XP Professional Service Pack 2
    2008年11月5日 1:43

回答

  • この問題については、Microsoftのインシデントを使用して回答をいただきましたので報告と、それと同時に本件の終了とさせていただきます。

    [Microsoft様からの回答]
    WindowsXPでの自動再生の選択を行うダイアログを制御する方法は、レジストリ操作(プログラムからの書き換え)によっては制御できない。

    とのことでした。

    WindowsVistaでは、自動再生の制御がXPと異なっているらしく、自動再生ダイアログの制御を行うことが可能でした。
    また、XPでのこの現象は不具合ではなくOSの仕様という結論に至っています。
    同じような疑問をお持ちの方のために、ここに記載をしておきます。

    本件について助言をいただきました
    中川 俊輔さん、ありがとうございました。


    2009年1月26日 6:19

すべての返信

  • Hirothinさん、こんにちは!中川 俊輔です。

     

    調べた限りでは詳しい情報がなかったのですが、レジストリへの設定は、

    HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlersDefaultSelection

    にも設定が必要なのかもしれません。

     

    参考になりそうなサイトへのリンクを張っておきます。

    Registry TIP: No questions asked playback of DVDs Media Player Classic(MS以外のサイト)

    http://www.msfn.org/board/Registry-TIP-questions-t112428.html

    Implement an Autoplay Handler(MS以外のサイト)

    http://www.codeproject.com/KB/system/AutoplayDemo.aspx?print=true#InstallingandusingtheDemo6

     

    また、HKLMに記述する定義もきちんと作らないとうまくいかないようです。

    Supporting AutoPlay(定義の参考になるかと思います。)

    http://msdn.microsoft.com/en-us/library/aa969686(VS.85).aspx

     

    それでは!

     

     

    この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。

    コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。詳しくは http://www.microsoft.com/japan/communities/msp.mspx をご覧ください。

    2008年11月10日 9:32
  • 中川 俊輔さん、お返事ありがとうございます。

    教えていただいた、リンク先の情報と照らし合わせて、検証しました。
    以下に検証手順と結果を記載します。



    ① イベントハンドラの設定

     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival
     このキーへ文字列値
     "SampleCDAudioOnArrival"="" を書き込みました。
     これは、自動再生ダイアログの一覧に登録するためにも不可欠な文字列値です。

     上記のように登録した EventHandler から呼び出される Handler を以下の②で設定しています。


    ② ハンドラの設定

     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers
     へ設定しました。

    キー名:「 SampleCDAudioOnArrival 」
    (SampleCDAudioOnArrival 内の値)
     ※種類は全て文字列値です。

     名前                    データ
     Action                オーディオCDを再生
     DefaultIcon        (インストールフォルダ)\Sample.exe,0
     InvokeProgID     SampleShowSongsOnCD
     InvokeVerb         open
     Provider              Sample

     これで、

      オーディオCD挿入
          ↓
      PlayCDAudioOnArrival イベントの発行
          ↓
      SampleCDAudioOnArrival ハンドラの実行

     という流れができました。
     そしてここからは推測なんですが、 SampleCDAudioOnArrival ハンドラが実行されると、(InvokeProgID、InvokeVerb)の値を元に動作が決定され、HKLM\SOFTWARE\Classes\SampleShowSongsOnCD 以下のコマンドが実行されるものとします。
     そして、SampleCDAudioOnArrival ハンドラ を処理するために以下③の登録を行いました。


    ③ ②で登録した ハンドラの処理内容を設定

     HKLM\SOFTWARE\Classes\SampleShowSongsOnCD
      @=""
     HKLM\SOFTWARE\Classes\SampleShowSongsOnCD\shell
      @=""
     HKLM\SOFTWARE\Classes\SampleShowSongsOnCD\shell\open
      @="CDの再生"
     HKLM\SOFTWARE\Classes\SampleShowSongsOnCD\shell\open\command
      @="\"(インストールフォルダ)\Sample.exe\" \"%L\""


    ④ 常に選択した動作を行うようにする

     ここが、今回ネックとなっている所です。

     教えていただいたリンク先からの情報を参考に、
     HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlersDefaultSelection
     への設定も、以下のように行ってみました。
     
     ・EventHandlersDefaultSelection に設定した値
      HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlersDefaultSelection\PlayCDAudioOnArrival
       @="SampleCDAudioOnArrival"

     それ以外に気づいた点で、「常に選択した動作を行う」にチェックをすると、
     HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\UserChosenExecuteHandlers に、

     H:\\?\IDE#CdRomPIONEER_DVD-ROM_DVD-120_________________1.23____#5&82f5103&0&0.0.0#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}+SampleCDAudioOnArrival

     という値が書き込まれていました。

     この値を調べてみた結果、

     1.H:\\?\
     2.IDE#CdRomPIONEER_DVD-ROM_DVD-120_________________1.23____#5&82f5103&0&0.0.0#
     3.{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
     4.+SampleCDAudioOnArrival

     のブロックに分けられるのではないかと推測。さらに調べて、

     1. は、分かりませんでした。
     2. は、CDを挿入したドライブのデバイスインスタンスIDでした。
     3. は、DEVINTERFACE_VOLUMEのGUIDではないかと推測。
     4. は、結びつけるハンドラ名でした。

     それぞれの値を適切と思われる位置に設定してみましたが、思うような結果は得られませんでした。


     以上が、今回の検証結果となります。
     HKCU,HKLM それぞれへの設定項目はこれで十分かと思われましたが、自動再生ダイアログの「常に選択した・・」をチェックした場合と、直接レジストリを操作して書き込んだ場合とでは動作が異なっていることなどから、設定値が不足しているのかな?と思いました。

     UserChosenExecuteHandlers に書き込まれた値の「H:\\?\」の部分が何を意味するのか、というのも知りたいところです。

     また、この検証結果から「ここ、おかしいぞ」とか「この方法は?」とか気がついたことは何でもいいので教えてください。
     よろしくお願いいたします。
    2008年11月11日 6:09
  • この問題については、Microsoftのインシデントを使用して回答をいただきましたので報告と、それと同時に本件の終了とさせていただきます。

    [Microsoft様からの回答]
    WindowsXPでの自動再生の選択を行うダイアログを制御する方法は、レジストリ操作(プログラムからの書き換え)によっては制御できない。

    とのことでした。

    WindowsVistaでは、自動再生の制御がXPと異なっているらしく、自動再生ダイアログの制御を行うことが可能でした。
    また、XPでのこの現象は不具合ではなくOSの仕様という結論に至っています。
    同じような疑問をお持ちの方のために、ここに記載をしておきます。

    本件について助言をいただきました
    中川 俊輔さん、ありがとうございました。


    2009年1月26日 6:19