- PVSM.RU - https://www.pvsm.ru -
MPC HC может сохранять в настройках (в реестре или в ini-файле) до 20 закладок на последнее место просмотра для видеофайлов и столько же для DVD. Для видеофайлов используются пары ключей File Name N / File Position N (c N от 0 до 19). Для DVD используется один ключ DVD Position N (в том же диапазоне; плеер умудряется сохранять в одной записи как идентификатор DVD, так и место последнего просмотра). В реестре данные хранятся в разделе HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings.
Однако бывают условия, когда 20 закладок не хватает. Кто-то любит смотреть много фильмов параллельно, иногда откладывая просмотр каких-то на время. Кто-то слушает на MPC HC музыку (а ключи для неё используются те же самые: один большой альбом — и все закладки перезаписаны). Кто-то использует плеер для многократной тестовой проверки кодируемого видео. Наконец, одной учётной записью могут пользоваться сразу несколько членов семьи (например, дети могут смотреть мультфильмы, пока родители заняты). В общем, хотелось бы иметь надёжный способ сохранить закладку на нужный фильм и потом её восстановить.
Мне приходят в голову три способа: от самого простого и наименее гибкого до более сложного и тонкого (решения тестировались только в Windows XP).

Запускать экспорт приходится после закрытия плеера с фильмом, запустив MPC заново, потому что только перед закрытием обновляются данные о последних файлах в реестре. Создаётся .reg файл со всеми настройками (причём не только нужный нам раздел), и в этом ещё одно неудобство: при импорте настроек будет восстанавливаться не только нужная закладка, но и весь набор прежних настроек.
Поскольку стандартные средства работы с реестром не позволяют экспортировать отдельные записи реестра, нам опять придётся иметь дело с целым разделом, но теперь объём можно сузить до нужного HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings. Дополнительные преимущества также в том, что нам не нужно открывать плеер заново и не нужно вручную вводить имя закладки, всё будет делаться автоматически.
Проще некуда:
@echo off
reg export "hkcuSoftwareGabestMedia Player ClassicSettings" "%~dp1%~n1.reg"
Аргументом может быть последний видеофайл или папка с DVD. В той же директории создаётся одноимённый .reg-файл, который удобно потом импортировать одним щелчком перед возвратом к просмотру фильма.
Чтобы не приходилось каждый раз связываться с командной строкой или перетаскивать видео на ярлычок пакетного файла, реализуем более удобную связь.
Добавим в контекстное меню файлов и папок вызов нашего пакетного файла. Для этого достаточно создать следующий текстовый файл, сохранить его в юникоде с расширением .reg и запустить на интеграцию (только замените пути к программе на ваши, не забывая удваивать слеши).
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT*shell* MPC bookmark]
[HKEY_CLASSES_ROOT*shell* MPC bookmarkcommand]
@="E:\DOC\prg\bat\mpc_bm.bat "%1""
[HKEY_CLASSES_ROOTFoldershell* MPC bookmark]
[HKEY_CLASSES_ROOTFoldershell* MPC bookmarkcommand]
@="E:\DOC\prg\bat\mpc_bm.bat "%1""
Те, кто больше привыкли к этому файловому менеджеру, могут создать кнопку на панели инструментов (можно продублировать её предыдущим рецептом с контекстным меню):

Тогда можно будет создавать ею закладку для того файла, который находится в фокусе активной вкладки после просмотра видео.
Тут мы можем достигнуть ещё большего удобства. Если кто-то не знаком с Perl, это не страшно: просто скачайте и установите реализацию интерпретатора под Windows [1], всё остальное тоже не составит труда.
При помощи скрипта мы сможем сохранять только нужные ключи. Если делать закладку сразу после просмотра видео, нам нужны будут только самые первые записи в истории, они же последние по времени просмотра: File Name 0 + File Position 0 или DVD Position 0. Вдобавок скрипт будет проверять идентичность файла-аргумента и последнего файла в истории плеера, чтобы мы случайно не оставили ошибочную закладку.
Создайте следующий текстовый файл и сохраните его с расширением .pl:
################################################################################
use strict;
use warnings;
use Win32::TieRegistry;
################################################################################
$Registry->Delimiter("/");
my $movie = shift();
################################################################################
if ($movie && -d $movie) {
open(OUTPUT, '>:raw:encoding(UTF16-LE)', $movie . ".DVD.reg") or die "Cannot create the .reg file: $!n";
print OUTPUT
"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
'"DVD Position 0"="',
$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, ""rnrn";
close(OUTPUT) or die "Cannot close the .reg file: $!n";
}
elsif ($movie && -f $movie) {
my $last_file = $Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Name 0'};
if (lc($movie) eq lc($last_file)) {
open(OUTPUT, '>:raw:encoding(UTF16-LE)', $last_file =~ s/.w+$/.reg/r) or die "Cannot create the .reg file: $!n";
print OUTPUT
"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
'"File Name 0"="',
$last_file =~ s/\/\\/gr, ""rn",
'"File Position 0"="',
$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, ""rnrn";
close(OUTPUT) or die "Cannot close the .reg file: $!n";
}
else {
print "The input file does not match the last played one:nn$movienn$last_filenn";
system('pause');
}
}
else {
my $last_file = $Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Name 0'};
open(OUTPUT, '>:raw:encoding(UTF16-LE)', $last_file =~ s/^.+\//r =~ s/.w+$/+Last_DVD.reg/r) or die "Cannot create the .reg file: $!n";
print OUTPUT
"x{FEFF}Windows Registry Editor Version 5.00rnrn[HKEY_CURRENT_USER\Software\Gabest\Media Player Classic\Settings]rn",
'"File Name 0"="',
$last_file =~ s/\/\\/gr, ""rn",
'"File Position 0"="',
$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//File Position 0'}, ""rn",
'"DVD Position 0"="',
$Registry->{'HKEY_CURRENT_USER/Software/Gabest/Media Player Classic/Settings//DVD Position 0'}, ""rnrn";
close(OUTPUT) or die "Cannot close the .reg file: $!n";
}
################################################################################
Если скрипту передаётся папка, он сохраняет только закладку на последний DVD в .reg-файле с названием папки (проверить, тот ли это DVD, мне не представляется возможным: если кто-то знает, как это сделать, напишите, пожалуйста, в комментариях; но если делать закладку сразу после просмотра фильма и закрытия плеера, можно не волноваться за её правильность). Если передаётся файл, скрипт проверяет идентичность этого файла и последнего файла в истории; если файлы совпадают, скрипт создаёт одноимённый .reg-файл с двумя нужными ключами, если не совпадают — выдаёт сообщение об ошибке. Если скрипту вообще не передаются аргументы, он создаёт сводный .reg-файл с информацией о последнем DVD и последнем видеофайле в текущей активной папке.
Всё почти так же с минимальными изменениями (не забывайте прописывать ваши пути к программам).
Почему-то указания одного скрипта недостаточно, приходится задавать ещё и интерпретатор (при том, что расширение .pl добавлено в переменную PATHEXT):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT*shell* MPC bookmark]
[HKEY_CLASSES_ROOT*shell* MPC bookmarkcommand]
@="C:\Perl\bin\perl.exe E:\DOC\prg\perl\var\mpc_bm.pl "%1""
[HKEY_CLASSES_ROOTFoldershell* MPC bookmark]
[HKEY_CLASSES_ROOTFoldershell* MPC bookmarkcommand]
@="C:\Perl\bin\perl.exe E:\DOC\prg\perl\var\mpc_bm.pl "%1""
Похожая кнопка:


Приятного просмотра.
Автор: vmb
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/video/12987
Ссылки в тексте:
[1] скачайте и установите реализацию интерпретатора под Windows: http://www.activestate.com/activeperl/downloads
Нажмите здесь для печати.