CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    May 2002
    Location
    Sydney, Australia
    Posts
    4

    Question Launch default player for audio CD

    I am trying figure out how I can get my app to launch the default audio CD player, with a CD Extra (i.e., audio + data) in the CD drive. Oh, and I'm trying to avoid playing with the registry!!

    I know (thanks to a post by Ondrak in Nov 2000) that I could do it by parsing the HKEY_CLASSES_ROOT/AudioCD/shell/play/command registry entry to get the default AudioCD program, substituting parameters, and calling ShellExecute ... but that's way too ugly for my liking.

    I feel like I SHOULD be able to do it with a more simple ShellExecute call, but I can't for the life of me figure out how. If I try to "open" the drive, it simply brings up Explorer. If I try to "open" the first track (i.e. <drive>:\\Track01.cda), nothing happens (and I can't see the tracks in explorer anyway). "play" isn't a valid verb.

    Any thoughts???

  2. #2
    Join Date
    Aug 1999
    Location
    Wisconsin
    Posts
    507
    Not sure if this will work, but have you tried:

    ShellExecute(NULL, "open", "<drive>:\\Track01.cda", NULL, NULL, SW_SHOWNORMAL);

  3. #3
    Join Date
    May 2002
    Location
    Sydney, Australia
    Posts
    4
    Calling ShellExecute on Track01.cda works for a normal CD, but not for a "CD Extra" format CD (audio + data). It seems that Windows can detect it as an audio CD (because Media Player can play it), but in Explorer only the "data" part of the CD is visible. The audio tracks don't appear. Presumably this means ShellExecute also can't "see" the audio tracks.

    That means what I'm after is a neat way to invoke the "play" command for the "AudioCD" entry in the "File Types" tab of the explorer options. (AudioCD is one of the entries which doesn't actually have a file extension associated with it).

  4. #4
    Join Date
    May 2002
    Location
    Sydney, Australia
    Posts
    4

    Smile At last!...

    At long last I've come back to my own problem, and found the neat solution that I always thought must be there: Call ShellExecuteEx with at least the following fields of the SHELLEXECUTEINFO structure specified:

    fMask = SEE_MASK_CLASSNAME
    lpClass = _T("AudioCD")
    lpVerb = _T("play")

    Leave the lpFile NULL.

    This simply launches the "play" command for the default audio CD player, as registered under the pre-XP Autoplay mechanism (i.e., Autoplay V1 rather than V2). If the registered player's command line string has a "%1" parameter, the shell will substitute the current directory (or info.lpDirectory, if it's non-NULL).

    This is the only solution I have found that works for CD Extra format CDs.

    Incidentally: Why did I want to do that in the first place? Because I wrote an autorun app for a Data + Music CD-Extra CD, and wanted to include a "Play CD" button on it, which simply launches the default audio CD player.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured