Jetaudio "fernsteuern"

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Jetaudio "fernsteuern"

Beitrag 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