Seite 1 von 1

Jetaudio "fernsteuern"

Verfasst: 03.06.2008 15:25
von SoS
Mit diesem Beispiel lässt sich Jetaudio "fernsteuern".
Das Beispiel stammt aus der SDK Jetaudio_control und ich habe es mehr oder weniger gut in PB umgesetzt. ;)
Mögliche anwendung: programmierbare Fernbedinug,Informationen auf dem LCD der G15 anzeigen usw.

Code: Alles auswählen

; //////////////////////////////////////////////////////////////////////////
; //
; // How to get JetAudio window handle
; // -> m_hWndJetAudio = ::FindWindow("COWON Jet-Audio Remocon Class", "Jet-Audio Remote Control");
; //
; //////////////////////////////////////////////////////////////////////////
;
; //////////////////////////////////////////////////////////////////////////
; // Change current mode
; // wParam : CMP_CDP (Disc Mode), CMP_DGA (File Mode)
; // lParam : None
; // -> SendMessage(m_hWndJetAudio, WM_REMOCON_CHANGE_COMPONENT, CMP_DGA, 0); // change to file mode
#CMP_CDP 		=2
#CMP_DGA 		=3
#WM_REMOCON_CHANGE_COMPONENT =	#WM_APP+750

; //////////////////////////////////////////////////////////////////////////
; // Constants
; //////////////////////////////////////////////////////////////////////////
#MAX_REVERB_MODE		=4
#MAX_EQ_MODE		  	=14
#MAX_REPEAT_METHOD	=3
#MAX_RANDOM_METHOD	=3
#MAX_TIME_METHOD		=2

; //////////////////////////////////////////////////////////////////////////
; // Command
; //////////////////////////////////////////////////////////////////////////

; // Message for command. wParam is not used. For lParam, refer to Action commands below
#WM_REMOCON_SENDCOMMAND		=	#WM_APP+741

; //////////////////////////////////////////////////////////////////////////
; //
; // Action command
; //
; // Usage -> SendMessage(m_hWndJetAudio, WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(command, para));
; //
; //////////////////////////////////////////////////////////////////////////

; // Stop Playback
; // Para : not used
; // Return : N/A
#JRC_ID_STOP			=		5102

; // Start playback
; // Para : Track Number ( >= 1 ). Use 0 for normal play/pause.
; // Return : N/A
#JRC_ID_PLAY			=		5104

; // Play previous track
; // Para : not used
; // Return : N/A
#JRC_ID_PREV_TRACK	=		5107

; // Play next track
; // Para : not used
; // Return : N/A
#JRC_ID_NEXT_TRACK	=5108

; // RepeatMethod
; // Para : desired repeat mode (1 - 3) or 0 for next repeat mode
; // Return : current repeat mode
#JRC_ID_REPEATMODE	=5112

; // Move 10 seconds backward.
; // Para : not used
; // Return : N/A
#JRC_ID_BACKWARD	=5115

; // Move 10 seconds forward
; // Para : not used
; // Return : N/A
#JRC_ID_FORWARD	=5116

; // RandomMode
; // Para : desired random mode (1 - 3) or 0 for next random mode
; // Return : current random mode
#JRC_ID_RANDOMMODE		=5117

; // Slower playback.
; // Para : not used
; // Return : N/A
#JRC_ID_PLAY_SLOW		=5128

; // Faster playback.
; // Para : not used
; // Return : N/A
#JRC_ID_PLAY_FAST	=5129

; // Volume down.
; // Para : not used
; // Return : current volume (0 - 32)
#JRC_ID_VOL_DOWN		=5134

; // Volume up.
; // Para : not used
; // Return : current volume (0 - 32)
#JRC_ID_VOL_UP		=5135

; // This command is not used anymore.
#JRC_ID_VIDEOCD		=5168

; // Exit Jet-Audio.
; // Para : not used
; // Return : N/A
#JRC_ID_EXIT			=5171

; // Mute sound
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current mute status
#JRC_ID_ATT		=5172

; // Change main volume.
; // Para : Volume Value (0 - 100)
; // Return : current volume
#JRC_ID_SET_VOLUME		=5180

; // Change timer.
; // Para : second (0 is timer off)
; // Return : N/A
#JRC_ID_SET_TIMER	=5181

; // Set screen size as 1x.
; // Para : not used
; // Return : N/A
#JRC_ID_SCREEN_1X	=5188

; // Set screen size as 2x.
; // Para : not used
; // Return : N/A
#JRC_ID_SCREEN_2X	=5189

; // Set screen to full screen mode.
; // Para : not used
; // Return : N/A
#JRC_ID_SCREEN_FULL	=5190

; // Change equalizer mode.
; // Para : desired eq mode (0 - 13) or -1 for next eq
; // Return : current eq mode
#JRC_ID_CHANGE_EQ		=5191

; // Move playback position.
; // Para : New position (second)
; // Return : N/A
#JRC_ID_SEEK			=5192

; // Change Reverb mode
; // Para : desired reverb mode (0 - 3) or -1 for next reverb mode
; //        To turn off/on, send current reverb mode as parameter
; // Return : current reverb mode (0 - 3) or -1 if turned off
#JRC_ID_CHANGE_SFX_REVERB	=5200

; // GoUp/Return (for VideoCD/DVD)
; // Para : not used
; // Return : N/A
#JRC_ID_GOUP			=5202

; // Toggle screen mode between windowed / full screen mode
; // Para : not used
; // Return : 1 if full screen, 0 if windowed mode
#JRC_ID_CHANGE_SCREEN_SIZE=5205

; // Change Album sequentially
; // Para : 1 (next album) or -1 (previous album)
; //        For disc mode, change drive
; // Return : N/A
#JRC_ID_CHANGE_ALBUM	=5206

; // Minimize/Restore Jet-Audio
; // Para : not used
; // Return : 0:minimized or hidden, 1:normal
#JRC_ID_MINIMIZE		=5701

; // Change Wide mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_WIDE	=6000

; // Change XBass mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_XBASS	=6001

; // Change BBE mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_BBE	=6002

; // Change B3D(BBE ViVA) mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_B3D	=6003

; // Show Open dialog box
; // Para : not used
; // Return : N/A
#JRC_ID_OPEN_FILES		=6004

; // Eject current CD-ROM drive
; // Para : not used
; // Return : N/A
#JRC_ID_EJECT_DRIVE		=6005

; // Change current CD-ROM drive
; // Para : drive letter
; // Return : N/A
#JRC_ID_SELECT_DRIVE	=6006

; // Change to tray-only mode
; // Para : not used
; // Return : N/A
#JRC_ID_GOTO_TRAY	=6007

; // Load album
; // Para : album index
; // Return : N/A
#JRC_ID_SELECT_ALBUM		=6008

; // Refresh contents of current album
; // Para : not used
; // Return : N/A
#JRC_ID_ALBUM_REFRESH	=6009

; // Sort contents of current album
; // Para : not used
; // Return : N/A
#JRC_ID_ALBUM_SORT	=6010

; // Change Crossfade mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_XFADE	=6011

; // Change X-Surround mode
; // Para : 0(Toggle), 1(ON), -1(OFF)
; // Return : current status
#JRC_ID_CHANGE_SFX_XSR	=6012

; //===============================DVD====================================//

; // Change DVD Language sequentially
; // Para : not used
; // Return : N/A
#JRC_ID_DVD_CHANGE_LANGUAGE	=7030

; // Change DVD Subtitle sequentially
; // Para : not used
; // Return : N/A
#JRC_ID_DVD_CHANGE_SUBTITLE	=7031

; // Change DVD Angle sequentially
; // Para : not used
; // Return : N/A
#JRC_ID_DVD_CHANGE_ANGLE	=7032

; // Call DVD Title Menu
; // Para : not used
; // Return : N/A
#JRC_ID_DVDMENU_TITLE	=7050

; // Call DVD Root Menu
; // Para : not used
; // Return : N/A
#JRC_ID_DVDMENU_ROOT	=7051


; //////////////////////////////////////////////////////////////////////////
; // Status
; //////////////////////////////////////////////////////////////////////////

; // Message for status. wParam is not used. For lParam, refer to commands below
#WM_REMOCON_GETSTATUS	=#WM_APP+740

; //////////////////////////////////////////////////////////////////////////
; //
; // Status command
; //
; // Usage -> return = SendMessage(m_hWndJetAudio, WM_REMOCON_GETSTATUS, 0, command);
; //
; //////////////////////////////////////////////////////////////////////////

#GET_STATUS_START					=0	; // Indicator for component commands

; // Return : MCI_MODE_PAUSE(529) or MCI_MODE_PLAY(526) or MCI_MODE_STOP(525)
#GET_STATUS_STATUS				=1

; // Return : 0:Elapsed, 1:Remaining
#GET_STATUS_TIME_MODE			=2

; // Return : 0:Normal, 1:Random, 2:Program
#GET_STATUS_RANDOM_MODE			=3

; // Return : 0:Normal, 1:Repeat This, 2:Repeat All
#GET_STATUS_REPEAT_MODE			=4

; // Get track information of current track
; // string will be returned using WM_COPYDATA message
#GET_STATUS_TRACK_INFO			=5

; // Return : current speed
#GET_STATUS_SPEED				=6

; // Return : number of tracks in current album
#GET_STATUS_MAX_TRACK			=7

; // Return : current track number
#GET_STATUS_CUR_TRACK			=8

; // Return : current playback time
#GET_STATUS_CUR_TIME				=9

; // Return : length of current track (in msec)
#GET_STATUS_MAX_TIME				=10

; // Get file name of current track
; // string will be returned using WM_COPYDATA message
#GET_STATUS_TRACK_FILENAME		=11

; // Get title info of current track
; // string will be returned using WM_COPYDATA message
#GET_STATUS_TRACK_TITLE			=12

; // Get artist info of current track
; // string will be returned using WM_COPYDATA message
#GET_STATUS_TRACK_ARTIST			=13

; // Get all tracks of current album
; // string will be returned using WM_COPYDATA message
#GET_STATUS_TRACK_LIST			=14

; // Get id of current album
; // string will be returned using WM_COPYDATA message
#GET_STATUS_ALBUMID				=15

; // Return : current drive letter
#GET_STATUS_CUR_DRIVE			=16

; // Get all drive letters of CD-ROM drives
; // string will be returned using WM_COPYDATA message
#GET_STATUS_DRIVE_LIST			=17

; // Get all albums of jetaudio
; // string will be returned using WM_COPYDATA message
#GET_STATUS_ALBUM_LIST			=18

; // Get album information of current album
; // string will be returned using WM_COPYDATA message
#GET_STATUS_ALBUM_INFO			=19

; // for VideoCD/DVD
; // 0:Normal, 1:VCD Menu, 2:DVD Menu
#GET_STATUS_MENU_MODE			=20


; // This command is not used anymore
#GET_STATUS_RUNTIME_FLAG			=101

; // This command is not used anymore
#GET_STATUS_QUICKWINDOW			=102


; // Get Mute status
; // Return : 0:Mute OFF, 1:Mute ON
#GET_STATUS_ATT					=110

; // Get EQ mode
; // Return : 0 - 13
#GET_STATUS_EQ_MODE				=111

; // Get Reverb status
; // Return : 0:OFF, 1:ON
#GET_STATUS_REVERB_FLAG			=120

; // Get Reverb status
; // Return : 0 - 4
#GET_STATUS_REVERB_MODE			=121

; // Get screen mode
; // Return : 0:Windowed, 1:Full screen
#GET_STATUS_SCREEN_MODE			=122

; // Get Wide status
; // Return : 0:OFF, 1:ON
#GET_STATUS_WIDE_FLAG			=123

; // Get X-Bass status
; // Return : 0:OFF, 1:ON
#GET_STATUS_XBASS_FLAG			=124

; // Get BBE status
; // Return : 0:OFF, 1:ON
#GET_STATUS_BBE_FLAG			=125

; // Get BBE ViVA status
; // Return : 0:OFF, 1:ON
#GET_STATUS_B3D_FLAG				=126

; // Get Volume
; // Return : 0 - 100
#GET_STATUS_VOLUME				=127

; // Get current mode
; // Return : 1:Disc mode, 0:File mode
#GET_STATUS_PLAY_MODE			=128

; // Get current video disc playback mode
; // for VCD/DVD
#GET_STATUS_VCD_MODE				=130	; // 0:None, 1:VCD, 2:DVD

; // Get X-Surround status
; // Return : 0:OFF, 1:ON
#GET_STATUS_XSR_FLAG				=131

; // Get Crossfade status
; // Return : 0:OFF, 1:ON
#GET_STATUS_XFADE_FLAG		=132

; // Get JetAudio's version info
#GET_STATUS_JETAUDIO_VER1		=995	; // major version number -> 6 for 6.1.7
#GET_STATUS_JETAUDIO_VER2		=996	; // minor version number -> 1 for 6.1.7
#GET_STATUS_JETAUDIO_VER3		=997	; // build version number -> 7 for 6.1.7

; // Get JetAudio supported API version
; // 0 : FirstVersion,
; // 1 : DVD & Album Name & Track Name supported
; // 2 : JetAudio 5
; // 3 : JetAudio 5.2 or later
#GET_STATUS_SUPPORTED_VER		=999

; //////////////////////////////////////////////////////////////////////////
; // WM_COPYDATA is used for receive string information from Jet-Audio
; // For more information, refer to example source code
; //////////////////////////////////////////////////////////////////////////
#JRC_COPYDATA_ID_ALBUMNAME	= $1000
#JRC_COPYDATA_ID_DRIVENAME	= $1001
#JRC_COPYDATA_ID_GETVER				= $1002
#JRC_COPYDATA_ID_ALBUM_CHANGED	= $1003
#JRC_COPYDATA_ID_ALBUM_REMOVED	= $1004
#JRC_COPYDATA_ID_ALBUM_ADDED		= $1004

#JRC_COPYDATA_ID_DVD_CHAPTER		= $2000
#JRC_COPYDATA_ID_DVD_LANGUAGE	= $2001
#JRC_COPYDATA_ID_DVD_SUBTITLE	= $2002
#JRC_COPYDATA_ID_DVD_ANGLE		= $2003

#JRC_COPYDATA_ID_TRACK_FILENAME	= $3000
#JRC_COPYDATA_ID_TRACK_TITLE		= $3001
#JRC_COPYDATA_ID_TRACK_ARTIST	= $3002
#JRC_COPYDATA_ID_TRACK_LIST		= $3003
#JRC_COPYDATA_ID_ALBUMID			= $3004
#JRC_COPYDATA_ID_DRIVE_LIST		= $3005
#JRC_COPYDATA_ID_ALBUM_LIST		= $3006
#JRC_COPYDATA_ID_ALBUM_INFO		= $3007
#JRC_COPYDATA_ID_TRACK_INFO		= $3008

Global Window_0
Global Text_0
Global Text_1
Global Text_2
Global Text_3
Global Text_4
Global Text_5
Global Text_6
Global Text_7
Global Text_8
Global Text_9
Global Text_10
Global Text_11
Global TrackBar_12
Global Frame3D_13
Global Button_14
Global Button_15
Global Button_16
Global Button_17
Global Button_18
Global Button_19
Global Text_20
Global Spin_21
Global CheckBox_22
Global Button_23
Global Button_24
Global ComboBox_25
Global ComboBox_26
Global Button_27
Global Button_28
Global ComboBox_29
Global Text_30
Global ComboBox_31
Global Button_32
Global Button_33
Global Button_34
Global Button_35

Structure audio
  TrackInfo.l
  VolumeInfo.l
  TimeInfo.l
  StatusInfo.l
  RepeatInfo.l
  RandomInfo.l
  MAX_TRACK.l
  CUR_TRACK.l
  ALBUMID.s
  TRACK_FILENAME.s
  TRACK_TITLE.s
  TRACK_ARTIST.s
EndStructure

Global m_hWndJetAudio = FindWindow_("COWON Jet-Audio Remocon Class", "Jet-Audio Remote Control")
Global jet.audio

With jet
  \TrackInfo=-1
  \VolumeInfo=-1
  \TimeInfo=-1
  \StatusInfo=-1
  \RepeatInfo=-1
  \RandomInfo=-1
  \MAX_TRACK=-1
  \CUR_TRACK=-1
  \ALBUMID="-1"
  \TRACK_FILENAME="-1"
  \TRACK_TITLE="-1"
  \TRACK_ARTIST="-1"
EndWith

Procedure  MAKELPARAM(hiword,loword)
  ProcedureReturn ((hiword &$FFFF)+loword<<16)
EndProcedure

Procedure Update_TrackInfo()
  Static  active_Item
  If m_hWndJetAudio= #False
    ProcedureReturn 0
  EndIf
	SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_TRACK_FILENAME);
	SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_TRACK_TITLE);
	SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_TRACK_ARTIST);
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_CUR_TRACK)
  If active_Item <>l
    active_Item=l
    SetGadgetText(Text_2,Str(l))
    SetGadgetState(ComboBox_31,active_Item-1)
  EndIf
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_MAX_TRACK)
  If l
    jet\MAX_TRACK=l
    SetGadgetText(Text_4,Str(l))
  EndIf
EndProcedure

Procedure Update_VolumeInfo()
  If m_hWndJetAudio= #False
    ProcedureReturn 0
  EndIf
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_VOLUME)
  If l<>jet\VolumeInfo
    jet\VolumeInfo=l
    SetGadgetState(Spin_21,l)
    SetGadgetText(Spin_21, Str(l))
    l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_ATT)
    SetGadgetState(CheckBox_22,l)
  EndIf
EndProcedure

Procedure Update_StatusInfo()
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_STATUS)
  If l<>jet\StatusInfo
    jet\StatusInfo=l
    Select l
      Case #MCI_MODE_PLAY
        SetGadgetText(Text_5,"Playing")
      Case #MCI_MODE_PAUSE
        SetGadgetText(Text_5,"Paused")
      Case #MCI_MODE_STOP
        SetGadgetText(Text_5,"Stopped")
      Default
        SetGadgetText(Text_5,"")
    EndSelect
  EndIf
EndProcedure

Procedure Update_TimeInfo()
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_MAX_TIME)
  l/1000
  If l <> jet\TimeInfo
    jet\TimeInfo=l
    SetGadgetAttribute(TrackBar_12,#PB_TrackBar_Maximum,l)
  EndIf 
    l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_CUR_TIME)
    l/1000
    SetGadgetState(TrackBar_12,l)
    SetGadgetText(Text_11,Str(l/60)+":"+Str(l%60))
EndProcedure

Procedure Update_RandomInfo()
  If m_hWndJetAudio= #False
    ProcedureReturn 0
  EndIf
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, 0, #GET_STATUS_RANDOM_MODE)
  If l <> jet\RandomInfo
    jet\RandomInfo=l
    SetGadgetState(ComboBox_26,l)
  EndIf
EndProcedure

Procedure Update_RepeatInfo()
  If m_hWndJetAudio= #False
    ProcedureReturn 0
  EndIf
  If l <> jet\RepeatInfo
    jet\RepeatInfo=l
    l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, 0, #GET_STATUS_REPEAT_MODE)
    SetGadgetState(ComboBox_25,l)
  EndIf
EndProcedure

Procedure Update_Tracks()
  SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_ALBUMID)
EndProcedure

Procedure Update_PlayMode()
  If m_hWndJetAudio= #False
    ProcedureReturn 0
  EndIf
  l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, 0, #GET_STATUS_PLAY_MODE)
  If l=0
    SetGadgetState(Button_27,1)
    SetGadgetState(Button_28,0)
    DisableGadget(ComboBox_29, 1)
  ElseIf l=1
    SetGadgetState(Button_27,0)
    SetGadgetState(Button_28,1)
    DisableGadget(ComboBox_29, 0)
    SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_DRIVE_LIST)
  EndIf
EndProcedure

Procedure.l Callback(hwnd, msg, wParam, lParam)
  Static ALBUMNAME.s
  result = #PB_ProcessPureBasicEvents
  Select msg
    Case #WM_COPYDATA
      *pp.COPYDATASTRUCT =lParam
      Select *pp\dwData
        Case #JRC_COPYDATA_ID_TRACK_FILENAME
          If jet\TRACK_FILENAME <>PeekS(*pp\lpData)
            jet\TRACK_FILENAME =PeekS(*pp\lpData)
            SetGadgetText(Text_1,jet\TRACK_FILENAME )
          EndIf
        Case #JRC_COPYDATA_ID_TRACK_TITLE
          If jet\TRACK_TITLE <>PeekS(*pp\lpData)
            jet\TRACK_TITLE =PeekS(*pp\lpData)
            SetGadgetText(Text_7, jet\TRACK_TITLE)
          EndIf
        Case #JRC_COPYDATA_ID_TRACK_ARTIST
          If jet\TRACK_ARTIST <>PeekS(*pp\lpData)
            jet\TRACK_ARTIST =PeekS(*pp\lpData)
            SetGadgetText(Text_9, jet\TRACK_ARTIST)
          EndIf
        Case #JRC_COPYDATA_ID_ALBUMID
          str.s= PeekS(*pp\lpData)
          If str<>jet\ALBUMID
            jet\ALBUMID=str
            SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS,WindowID(Window_0), #GET_STATUS_TRACK_LIST)
            Update_PlayMode()
          EndIf
        Case #JRC_COPYDATA_ID_TRACK_LIST
          Count=jet\MAX_TRACK
          dat=*pp\lpData
          ClearGadgetItemList(ComboBox_31)
          For i=0 To Count-1
            txt.s= PeekS(dat)
            If txt="0" ; Listende erreicht
              Break
            Else
              AddGadgetItem(ComboBox_31, -1,txt)
            EndIf
            dat+Len(txt)+1 ; doppel 0 terminierter String deshalb +1
          Next
          l = SendMessage_(m_hWndJetAudio, #WM_REMOCON_GETSTATUS, WindowID(Window_0), #GET_STATUS_CUR_TRACK)
          If l<> jet\CUR_TRACK
            jet\CUR_TRACK=l
            SetGadgetState(ComboBox_31,l-1)
          EndIf
      EndSelect
      result = #True
  EndSelect
  ProcedureReturn result
EndProcedure

Procedure OpenWindow_Window_0()
  Window_0 = OpenWindow(#PB_Any, 406, 150, 618, 400, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  If Window_0
    If CreateGadgetList(WindowID(Window_0))
      Text_0 = TextGadget(#PB_Any, 5, 10, 150, 15, "File Name/Track")
      Text_1 = TextGadget(#PB_Any, 165, 5, 445, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_2 = TextGadget(#PB_Any, 165, 30, 90, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_3 = TextGadget(#PB_Any, 270, 30, 30, 15, "of", #PB_Text_Center)
      Text_4 = TextGadget(#PB_Any, 310, 30, 85, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_5 = TextGadget(#PB_Any, 435, 30, 175, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_6 = TextGadget(#PB_Any, 0, 55, 155, 15, "Titel:")
      Text_7 = TextGadget(#PB_Any, 165, 55, 445, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_8 = TextGadget(#PB_Any, 0, 80, 155, 15, "Artist:")
      Text_9 = TextGadget(#PB_Any, 165, 80, 445, 20, "", #PB_Text_Border|#PB_Text_Center)
      Text_10 = TextGadget(#PB_Any, 0, 105, 155, 15, "Time:")
      Text_11 = TextGadget(#PB_Any, 165, 105, 80, 20, "", #PB_Text_Border|#PB_Text_Center)
      TrackBar_12 = TrackBarGadget(#PB_Any, 255, 105, 355, 20, 0, 100)
      Frame3D_13 = Frame3DGadget(#PB_Any, 0, 130, 615, 120, "", #PB_Frame3D_Double)
      Button_14 = ButtonGadget(#PB_Any, 45, 145, 65, 25, "Previous")
      Button_15 = ButtonGadget(#PB_Any, 140, 145, 65, 25, "Rewind")
      Button_16 = ButtonGadget(#PB_Any, 245, 145, 65, 25, "Stop")
      Button_17 = ButtonGadget(#PB_Any, 340, 145, 65, 25, "Play/Pause")
      Button_18 = ButtonGadget(#PB_Any, 445, 145, 65, 25, "FF")
      Button_19 = ButtonGadget(#PB_Any, 535, 145, 65, 25, "Next")
      Text_20 = TextGadget(#PB_Any, 5, 205, 140, 15, "Volume:")
      Spin_21 = SpinGadget(#PB_Any, 160, 200, 55, 20, 0, 100)
      SetGadgetState(Spin_21,0):SetGadgetText(Spin_21, "0")
      CheckBox_22 = CheckBoxGadget(#PB_Any, 245, 200, 65, 20, "Mute")
      Button_23 = ButtonGadget(#PB_Any, 445, 210, 65, 20, "Open...")
      Button_24 = ButtonGadget(#PB_Any, 535, 210, 60, 20, "Eject")
      ComboBox_25 = ComboBoxGadget(#PB_Any, 5, 265, 115, 100)
      AddGadgetItem(ComboBox_25,-1,"No Repeat")
      AddGadgetItem(ComboBox_25,-1,"Repeat This")
      AddGadgetItem(ComboBox_25,-1,"Repeat All")
      SetGadgetState(ComboBox_25,1)
      ComboBox_26 = ComboBoxGadget(#PB_Any, 135, 265, 125, 100)
      AddGadgetItem(ComboBox_26,-1,"No Random")
      AddGadgetItem(ComboBox_26,-1,"Random")
      AddGadgetItem(ComboBox_26,-1,"Program")
      SetGadgetState(ComboBox_26,1)
      Button_27 = ButtonGadget(#PB_Any, 280, 265, 85, 20, "File Mode", #PB_Button_Toggle)
      SetGadgetState(Button_27,1)
      Button_28 = ButtonGadget(#PB_Any, 380, 265, 85, 20, "Disc Mode", #PB_Button_Toggle)
      ComboBox_29 = ComboBoxGadget(#PB_Any, 485, 265, 115, 100)
      DisableGadget(ComboBox_29, 1)
      Text_30 = TextGadget(#PB_Any, 5, 315, 135, 15, "Tracks")
      ComboBox_31 = ComboBoxGadget(#PB_Any, 150, 310, 450, 100)
      Button_32 = ButtonGadget(#PB_Any, 5, 370, 130, 20, "Run JetAudio")
      Button_33 = ButtonGadget(#PB_Any, 160, 370, 130, 20, "Close JetAudio")
      Button_34 = ButtonGadget(#PB_Any, 320, 370, 130, 20, "Minimize/Restore")
      Button_35 = ButtonGadget(#PB_Any, 475, 370, 130, 20, "Goto Tray/Restore")
    EndIf
  EndIf
EndProcedure

Procedure Update()
  m_hWndJetAudio = FindWindow_("COWON Jet-Audio Remocon Class", "Jet-Audio Remote Control")
  Update_TrackInfo()
  Update_VolumeInfo()
  Update_TimeInfo()
  Update_StatusInfo()
  Update_RepeatInfo()
  Update_RandomInfo()
  Update_Tracks()
EndProcedure

OpenWindow_Window_0()
SetWindowCallback(@Callback())
SetTimer_(WindowID(Window_0),3,500,@Update())

Repeat
  evt=EventType()
  Select WaitWindowEvent(20)
    Case #PB_Event_Gadget
      Select EventGadget()
        Case TrackBar_12
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_SEEK, GetGadgetState(TrackBar_12)))
        Case Button_14
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_PREV_TRACK)
        Case Button_15
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_BACKWARD)
        Case Button_16
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_STOP)
        Case Button_17
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_PLAY)
        Case Button_18
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_FORWARD)
        Case Button_19
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_NEXT_TRACK)
        Case Spin_21
          SetGadgetText(Spin_21, Str(GetGadgetState(Spin_21)))
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_SET_VOLUME, GetGadgetState(Spin_21)))
        Case CheckBox_22
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_ATT)
        Case Button_23
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_OPEN_FILES)
        Case Button_24
        Case ComboBox_25
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_REPEATMODE, GetGadgetState(ComboBox_25)+1))
        Case ComboBox_26
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_RANDOMMODE, GetGadgetState(ComboBox_26)+1))
        Case Button_27
          SetGadgetState(Button_28,0)
          DisableGadget(ComboBox_29, 1)
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_CHANGE_COMPONENT, #CMP_DGA, 0)
        Case Button_28
          SetGadgetState(Button_27,0)
          DisableGadget(ComboBox_29, 0)
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_CHANGE_COMPONENT, #CMP_CDP, 0)
        Case ComboBox_29

        Case ComboBox_31
          If active_Item <> GetGadgetState(ComboBox_31) Or active_Item <> (jet\CUR_TRACK -1)
            active_Item = GetGadgetState(ComboBox_31)
            jet\CUR_TRACK=active_Item+1
            SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_PLAY, jet\CUR_TRACK ))
          EndIf
        Case Button_32
          ShellExecute_(hwnd, "open", "jetaudio.exe", #Null, #Null, #SW_SHOWDEFAULT)
        Case Button_33
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, #JRC_ID_EXIT)
        Case Button_34
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_MINIMIZE, 0))
        Case Button_35
          SendMessage_(m_hWndJetAudio, #WM_REMOCON_SENDCOMMAND, 0, MAKELPARAM(#JRC_ID_GOTO_TRAY, 0))
      EndSelect
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case Window_0
          CloseWindow(Window_0)
          Window_0 = 0
          Break
      EndSelect
  EndSelect
ForEver