Я для себя написал небольшую прогу, которая подкладывается в каталог к предварительно сконфигурированному ListTV и делает она следующее:
1) с e1 автоматом качается программа в формате ListTV и кладется в определенный каталог
2) запускает ListTV, который загружает скачанную программу телепередач и удаляет уже ненужные файлы
3) посылает в ListTV нажатия клавиш, которые заставляют его выгрузить программу в формате JTV в папку к бехолдеру
программка написана на дельфе, исходник прилагаю
Код:
program tv_console;
{$APPTYPE CONSOLE}
uses
SysUtils,Windows,WinInet,DateUtils;
var
fname,url,s,s1:string;
procedure WinExecute;
var
si: TSTARTUPINFO;
pi: TPROCESSINFORMATION;
hwnd:Cardinal;
l:integer;
begin
l:=0;
ZeroMemory(@si, SizeOf(si));
ZeroMemory(@pi, SizeOf(pi));
GetStartupInfo(si);
si.cb := SizeOf(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
Win32Check(CreateProcess(nil, pchar('ListTV.exe'), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, si, pi));
//ищем окно запущенного процесса
repeat
hwnd:=FindWindow(nil, 'ListTV');
inc(l);
sleep(1000);
until ( hwnd <> 0 ) or ( l > 30 );
if hwnd<>0 then
begin
SetForegroundWindow(hwnd);
sleep(1000);
keybd_event(VK_MENU,0,0,0);
keybd_event(ord('S'),0,0,0);
keybd_event(ord('S'),0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
sleep(1000);
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
sleep(1000);
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
sleep(1000);
keybd_event(VK_RETURN,0,0,0);
keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
sleep(1000);
keybd_event(VK_MENU,0,0,0);
keybd_event(ord('X'),0,0,0);
keybd_event(ord('X'),0,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
end;
WaitforSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
end;
procedure DownloadFile;
var
hInet, //<-переменная сод. указатель на сессию
hURL: HINTERNET; //<-указатель на URL
ReadLen: Cardinal; //<-количество реально прочитанных байт
fBuf: array[1..4096] of byte; //<-буфер куда качаем
f: file; //<-файл куда качаем
Header: string; //<-|дополнительная переменная в HTTP заголовок
begin
AssignFile(f, fname);
ReWrite(f, 1);
//открываем сессию
hInet := InternetOpen('Mozilla', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
//Пишем дополнительную строку для заголовка
Header := 'Accept: */*';
//открываем URL
hURL := InternetOpenURL(hInet, PChar(url), pchar(Header), StrLen(pchar(Header)), 0, 0);
//качаем до тех пор пока реально прочитаное число байт не
//будет равно нулю
repeat //читаем в буфер
InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
BlockWrite(f, fBuf, ReadLen); //<-пишем в файл
until (ReadLen = 0);
InternetCloseHandle(hURL); //<-|закрываем
InternetCloseHandle(hInet); //<-|сесcии
CloseFile(f); //<-|и файл
end;
BEGIN
//качаем программу на текущую неделю
s:=datetostr(date-1);
s1:=Copy(s,7,4)+Copy(s,4,2)+Copy(s,1,2);
fname:='c:\downloads\ekatv'+s1+'.htb';
url:='http://www.e1.ru/afisha/tv/getprog.php?start='+s1;
s:=datetostr(date-dayoftheweek(date)+7);
s1:=Copy(s,7,4)+Copy(s,4,2)+Copy(s,1,2);
url:=url+'&stop='+s1;
writeln(url);
DownloadFile;
//и на следующую
s:=datetostr(date-dayoftheweek(date)+8);
s1:=Copy(s,7,4)+Copy(s,4,2)+Copy(s,1,2);
fname:='c:\downloads\ekatv'+s1+'.htb';
url:='http://www.e1.ru/afisha/tv/getprog.php?start='+s1;
s:=datetostr(date-dayoftheweek(date)+14);
s1:=Copy(s,7,4)+Copy(s,4,2)+Copy(s,1,2);
url:=url+'&stop='+s1;
writeln(url);
DownloadFile;
//вызываем ListTV
WinExecute;
END.