- Digital CD Player frontend control specification ver 1.0 -

Digital CD Player [gRg[dl ver.1.0                 2000/07/09
                                       ڂ elfin@mth.biglobe.ne.jp


E͂߂
@͊OvOfW^bcvC[Rg[邱ƂړI
@ƂWindowsbZ[W̎dl߂̂łB
@̃bZ[Wdlɏ`ŃfW^bcvC[ɃbZ[W𑗂肱
@ƂɂAÕvOvC[𐧌䂷邱Ƃł܂B

EvC[̃EBhEnh̎擾
  fW^bcvC[ "TMyanDigitalCDPlayerForm" ƂEBhENX
  AO̐ɂ͂̃EBhEɉLŐR}h𓊂܂B
  
  [EBhEnh̎擾]
  HWND GetDCDPWindowHandle(void) 
  {
    HWND hwnd = FindWindow("TMyanDigitalCDPlayerForm",NULL);
    if (!hwnd)
      MessageBox(NULL,"Target Window not Found",MB_OK);
    return(hwnd);
  }

EEBhEbZ[W
  tgGhR}hƂė^郁bZ[Wԍ͎̂̂ƒ`܂
  
  #define WM_DCDP_IPC  (WM_USER + 0x200)


Eg
@tgGhR}h͊{IWinampʌ݊łB
  LIPC_*LPARAMɃZbgAeR}hŒ`p[^WPARAM
  ݒ肵ƁAvC[̃EBhEɑ΂SendMessages܂B

ER}h𑗂ۂ̒
@fW^bcvC[̓}`Xbh\Ő݌vĂ܂B̎sJ
@n͍ĐXbhւ̃bZ[W̃|XgŎw܂̂ŁAR}h𔭍s
@Ƃۂ̎sɈڂ܂ł炩^CO܂B̂߁A
@sñR}h͂炩Ԃđ邩AIPC_ISPLAYINGR}hŎs
@ɊmFƁȂɈڂĂB
@Iɂ͎sñR}ȟłPO~bxX[vĂ܂̂ŁA
@͂ȂƂ͎vĂ܂EE

ER}hڍ
  <`:WinAmpʌ݊>
  #define IPC_GETVERSION 0
  #define IPC_PLAYFILE   100
  #define IPC_DELETE     101
  #define IPC_STARTPLAY  102
  #define IPC_ISPLAYING  104
  #define IPC_GETOUTPUTTIME 105
  #define IPC_JUMPTOTIME 106
  #define IPC_SETVOLUME  122

  <`:DigitalCDPlayerj[N>
  #define IPC_SETPLAYMODE 0xF000
  #define IPC_GETPLAYMODE 0xF001
  #define IPC_PAUSERESUME 0xF002
  #define IPC_STOP        0xF003
  #define IPC_GETOUTPUTDEVICE 0xF004


 IPC_GETVERSION
 ----------------------------------------------------------------------------
 [@\] fW^bcvC[̃rWԂ܂B
@@@@8rbgɃW[rWA8rbgɃ}Ci[rW
@@@@Ԃ܂(16-31rbgڂ0Œ)
 [p[^] Ȃ
 [] Revision 1.05̏ꍇ
      DWORD version =  SendMessage(HWND,WM_DCDP_IPC,0,IPC_GETVERSION);
      // version = 0x00000105;

 IPC_PLAYFILE
 ----------------------------------------------------------------------------
 [@\] ĐgbNԍw肷B
 [p[^] WPARAMɃgbNlASCIIR[hw肷B
 @@@@@@ kLN^𑗂邱ƂŊmB
 [] gbN10JggbNɎw肷B
       SendMessage(HWND,WM_DCDP_IPC,'1',IPC_PLAYFILE);
       SendMessage(HWND,WM_DCDP_IPC,'0',IPC_PLAYFILE);
       SendMessage(HWND,WM_DCDP_IPC,0,IPC_PLAYFILE);

 IPC_DELETE
 ----------------------------------------------------------------------------
 [@\] ݒ蒆̓gbNԍNAAt~AJggbN
 @@@ ̐擪ɉt|WV߂B
 [p[^] Ȃ
 [] SendMessage(HWND,WM_DCDP_IPC,0,IPC_DELETE);
 
 
 IPC_STARTPLAY
 ----------------------------------------------------------------------------
 [@\] JggbN̍ĐJnB܂Aꎞ~
        (IPC_STOP/IPC_PAUSERESUME)̏ꍇ͍ĐĊJB
 [p[^] Ȃ
 [] SendMessage(HWND,WM_DCDP_IPC,0,IPC_STARTPLAY);
 
 
 IPC_ISPLAYING
 ----------------------------------------------------------------------------
 [@\] t󋵂擾
 [p[^] Ȃ
 [] 
      DWORD status = SendMessage(HWND,WM_DCDP_IPC,0,IPC_ISPLAYING);
      switch (status) {
        case 0  : break; //~
        case 1  : break; //t
        case 3  : break; //|[Y
      }


 IPC_GETOUTPUTTIME
 ----------------------------------------------------------------------------
 [@\] gbN̏≉t󋵂擾
 [p[^] WPARAM 16rbgɎ擾̎ʂݒ
              WPARAM & 0xFFFF  = 0 : ݉t̃gbNΈʒu擾
 @@@@@@@@@@@@@          tʒu~bPʂŕԂB
              WPARAM & 0xFFFF= 1 : JggbN̒擾
              @@@@@@         bPʂŕԂB
              WPARAM & 0xFFFF= 2 : wgbN̒擾A~b
              @@@@@@@@@@ PʂŕԂB
                               (WPARAM ̏16rbgɎ擾gbNw)
                                ُȃgbN⃁fBA}ł-1Ԃ܂
 [] gbN̒擾
      DWORD tracklen = SendMessage(HWND,WM_DCDP_IPC,1,IPC_GETOUTPUTTIME);
      gbNR̒擾
      DWORD tracklen = SendMessage(HWND,WM_DCDP_IPC,
                                     2 | ((DWORD)3 << 16),IPC_GETOUTPUTTIME);
 
 
 IPC_JUMPTOTIME
 ----------------------------------------------------------------------------
 [@\] JggbN̉tItZbgʒuw肷B
 @@@ tłȂĂAJggbNw肵ƂɎw肷΁Aݒ
 @@@ ܂Afsɂ͕K IPC_STARTPLAY sĂB
 [p[^] WPARAM : JggbN̐擪̎(~b)
 [] gbNS20bڂĐJn
      //JggbNSɈړ(œ̃ItZbgʒu̓Zbg)
      SendMessage(HWND,WM_DCDP_IPC,'4',IPC_PLAYFILE);
      SendMessage(HWND,WM_DCDP_IPC,0,IPC_PLAYFILE);
      // JggbN20bw
      SendMessage(HWND,WM_DCDP_IPC,20000,IPC_JUMPTOTIME);
      // tJn
      SendMessage(HWND,WM_DCDP_IPC,0,IPC_STARTPLAY);
      

 IPC_SETVOLUME
 ----------------------------------------------------------------------------
 [@\] fW^{[ݒ肷B
 [p[^] WPARAM : {[ 0 ` 0x3FF(ftHg 0xFF)
 [] {[𔼕ɐݒ
      SendMessage(HWND,WM_DCDP_IPC,0x80,IPC_SETVOLUME);


 IPC_SETPLAYMODE
 ----------------------------------------------------------------------------
 [@\] t[hw肷
 [p[^] WPARAM : t[h
                       0 : ʏ퉉t[h
                       1 : Pȉt[h([g[h)
                       2 : Pȃs[gt[h
                       3 : Sȃs[gt[h
                       4 : _t[h
                       5 : Pȉt[h(ʏ탂[h)

     [g[hɂƁAtłǂݏoXbhŃ[v
     @܂B[g[hɂƂɁAʂ̃[h֐؂ւƉtXbh
     @Eo܂it~܂j

 [] t[hPȃs[g[hɐ؂ւ܂B
      SendMessage(HWND,WM_DCDP_IPC,2,IPC_SETPLAYMODE);


 IPC_GETPLAYMODE
 ----------------------------------------------------------------------------
 [@\] ݂̉t[h擾܂B擾ĺAIPC_SETPLAYMODE
 @@@ p[^ƓlłB
 [p[^] Ȃ
 [] t[h擾܂B
      int mode = SendMessage(HWND,WM_DCDP_IPC,0,IPC_GETPLAYMODE);
      switch (mode) {
        case 0 : break; // ʏ퉉t[h
        case 1 : break; // Pȉt[h([g[h)
        case 2 : break; // Pȃs[gt[h
        case 3 : break; // Sȃs[gt[h
        case 4 : break; // _t[h
        case 5 : break; // Pȉt[h(ʏ탂[h)
      }

 IPC_PAUSERESUME
 ----------------------------------------------------------------------------
 [@\] tꎞ~A܂͉܂B
 [p[^] WPARAM = 0 :@ꎞ~s
              WPARAM = 1 :  ꎞ~
 [] tꎞ~܂B
      SendMessage(HWND,WM_DCDP_IPC,0,IPC_PAUSERESUME);


 IPC_STOP
 ----------------------------------------------------------------------------
 [@\] tꎞ~܂AIPC_PAUSERESUMEƈقȂAWAVEfoCX
 @@@ ܂B
 [p[^] Ȃ
 [] tꎞ~܂B
      SendMessage(HWND,WM_DCDP_IPC,0,IPC_STOP);
      
IPC_STOP,IPC_DELETEɂ~̃foCXgpԂ́AvC[̃[g
  쎞ɃfoCX邩ۂ̐ݒɍE܂B
@Y̍ڂ`FbNꍇADirectSoundo͑Ĩ[g͏ɃfoC
@X܂(჌xI[fBȈꍇ͏ɉ)B
  DirectSoundgpȂǉKvȂꍇɑ΂ΉłiE
  擾sۂDirectSoundł̓mCYꍇ߁j


 IPC_GETOUTPUTDEVICE
 ----------------------------------------------------------------------------
 [@\] vC[o͂ɎgĂfoCX擾܂B
 [p[^] Ȃ
 [] 
      int mode = SendMessage(HWND,WM_DCDP_IPC,0,IPC_GETOUTPUTDEVICE);
      switch (mode) {
        case 0 : break; //჌xI[fBIfoCX
        case 1 : break; //DirectSound
      }
