summaryrefslogtreecommitdiff
path: root/plugins/Watrack/players/pl_behold.pas
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Watrack/players/pl_behold.pas')
-rw-r--r--plugins/Watrack/players/pl_behold.pas175
1 files changed, 175 insertions, 0 deletions
diff --git a/plugins/Watrack/players/pl_behold.pas b/plugins/Watrack/players/pl_behold.pas
new file mode 100644
index 0000000000..977a021034
--- /dev/null
+++ b/plugins/Watrack/players/pl_behold.pas
@@ -0,0 +1,175 @@
+{BeholderTV}
+unit pl_behold;
+{$include compilers.inc}
+
+interface
+
+implementation
+
+uses windows,messages,common,wrapper,srv_player,wat_api;
+
+const
+ WM_BHCMD = WM_USER+200;
+ WMBH_CHNLUP = WM_USER+203; // Переключить на следующий канал
+ WMBH_CHNLDOWN = WM_USER+204; // Переключить на предыдущий канал
+ WMBH_VOLUMEUP = WM_USER+210; // Увеличить выбранный уровень
+ WMBH_VOLUMEDOWN = WM_USER+211; // Уменьшить выбранный уровень
+ WMBH_FREEZE = WM_USER+232; // Триггер стоп-кадра
+ WMBH_SETVOLUME = WM_USER+280; // Установить уровень громкости (LParam = 0..65535)
+ WMBH_GETVOLUME = WM_USER+281; // Получить текущий уровень громкости (использовать SendMessage, Result = 0..65535)
+ WMBH_GETVERSION = WM_USER+285; // Получить новер версии ПО (использовать SendMessage)
+
+const
+ TitleWndClass = 'TApplication';
+ EXEName = 'BEHOLDTV.EXE';
+
+var
+ TitleWnd:HWND;
+
+function enumproc(wnd:HWND; lParam:LPARAM):bool; stdcall;
+var
+ buf:array [0..64] of AnsiChar;
+begin
+ result:=true;
+ if GetClassNameA(wnd,buf,63)<>0 then
+ begin
+ if StrCmp(buf,TitleWndClass)=0 then
+ begin
+ TitleWnd:=wnd;
+ result:=false;
+ end
+ end;
+end;
+
+function Check(wnd:HWND;flags:integer):HWND;cdecl;
+begin
+ if wnd<>0 then
+ begin
+ result:=0;
+ exit;
+ end;
+ result:=FindWindow('TMain','BeholdTV');
+ if result<>0 then
+ EnumThreadWindows(GetWindowThreadProcessId(result,nil),@enumproc,0);
+end;
+
+function GetVersion(wnd:HWND):integer;
+begin
+ result:=DWORD(SendMessage(wnd,WM_BHCMD,WMBH_GETVERSION,0));
+ result:=((result shr 16) shl 8)+LoWord(result);
+end;
+
+function GetVersionText(ver:integer):PWideChar; //!!
+begin
+ mGetMem(result,10*SizeOf(WideChar));
+ IntToStr(result+1,ver);
+ result[0]:=result[1];
+ result[1]:='.';
+end;
+
+function GetFileName(wnd:HWND;flags:integer):pWideChar;cdecl;
+begin
+ result:=nil;
+end;
+
+function Pause(wnd:HWND):integer;
+begin
+ result:=0;
+ PostMessage(wnd,WM_BHCMD,WMBH_FREEZE,0);
+end;
+
+function Next(wnd:HWND):integer;
+begin
+ result:=0;
+ PostMessage(wnd,WM_BHCMD,WMBH_CHNLUP,0);
+end;
+
+function Prev(wnd:HWND):integer;
+begin
+ result:=0;
+ PostMessage(wnd,WM_BHCMD,WMBH_CHNLDOWN,0);
+end;
+
+function GetVolume(wnd:HWND):cardinal;
+begin
+ result:=WORD(SendMessage(wnd,WM_BHCMD,WMBH_GETVOLUME,0));
+ result:=(result shl 16)+(result shr 12);
+end;
+
+procedure SetVolume(wnd:HWND;value:cardinal);
+begin
+ SendMessage(wnd,WM_BHCMD,WMBH_SETVOLUME,value shl 12);
+end;
+
+function VolDn(wnd:HWND):integer;
+begin
+ result:=WORD(SendMessage(wnd,WM_BHCMD,WMBH_VOLUMEDOWN,0));
+end;
+
+function VolUp(wnd:HWND):integer;
+begin
+ result:=WORD(SendMessage(wnd,WM_BHCMD,WMBH_VOLUMEUP,0));
+end;
+
+function GetInfo(var SongInfo:tSongInfo;flags:integer):integer;cdecl;
+begin
+ result:=0;
+ if (flags and WAT_OPT_PLAYERDATA)<>0 then
+ begin
+ if SongInfo.plyver=0 then
+ begin
+ SongInfo.plyver:=GetVersion (SongInfo.plwnd);
+ SongInfo.txtver:=GetVersionText(SongInfo.plyver);
+ end;
+ exit;
+ end;
+
+ if (flags and WAT_OPT_CHANGES)<>0 then
+ SongInfo.wndtext:=GetDlgText(TitleWnd);
+end;
+
+function Command(wnd:HWND;cmd:integer;value:integer):integer;cdecl;
+begin
+ case cmd of
+ WAT_CTRL_PREV : result:=Prev(wnd);
+// WAT_CTRL_PLAY : result:=Play(wnd,pWideChar(value));
+ WAT_CTRL_PAUSE: result:=Pause(wnd);
+// WAT_CTRL_STOP : result:=Stop(wnd);
+ WAT_CTRL_NEXT : result:=Next(wnd);
+ WAT_CTRL_VOLDN: result:=VolDn(wnd);
+ WAT_CTRL_VOLUP: result:=VolUp(wnd);
+// WAT_CTRL_SEEK : result:=Seek(wnd,value);
+ else
+ result:=0;
+ end;
+end;
+
+const
+ plRec:tPlayerCell=(
+ Desc :'BeholdTV';
+ flags :WAT_OPT_HASURL;
+ Icon :0;
+ Init :nil;
+ DeInit :nil;
+ Check :@Check;
+ GetStatus:nil;
+ GetName :@GetFileName;
+ GetInfo :@GetInfo;
+ Command :@Command;
+ URL :nil;
+ Notes :'Still experimental, no tested. Can work not properly');
+
+var
+ LocalPlayerLink:twPlayer;
+
+procedure InitLink;
+begin
+ LocalPlayerLink.Next:=PlayerLink;
+ LocalPlayerLink.This:=@plRec;
+ PlayerLink :=@LocalPlayerLink;
+end;
+
+initialization
+// ServicePlayer(WAT_ACT_REGISTER,dword(@plRec));
+ InitLink;
+end.