Windows命令行窗口查询DLNA读取的多媒体文件路径和读取的进度;
以下代码Cygwin、WSL上均可用,实现过程依赖NirSoft的工具 opened_files_view;
opened_files_view
listdlnafiles() {
#查询 Windows DLAN 服务端进程打开的文件句柄
# See Also:https://stackoverflow.com/questions/15708/how-can-i-determine-whether-a-specific-file-is-open-in-windows
# Lonelyer注:Windows系统DLNA服务端进程为wmpnetwk.exe
local apppath="/v/SysinternalsSuite"
local DLNAPid=$(pslist|grep 'wmpnetwk'|awk '{print $2}')
echo "DNLA 进程Pid为:$DLNAPid"
if [ ! -z "$1" ];then
PATH="$apppath:$PATH" gsudo handle.exe -p $DLNAPid|grep -i "$1"
return
fi
PATH="$apppath:$PATH" gsudo handle.exe -p $DLNAPid
PATH="$apppath:$PATH" gsudo listdlls.exe $DLNAPid
}
listdlnafiles2() {
#查询 Windows DLAN 服务端进程打开的文件句柄,此方法使用nirsoft官方的软件工具:OpenedFilesView
# See Also:http://www.nirsoft.net/utils/opened_files_view.html
# Lonelyer注:Windows系统DLNA服务端进程为wmpnetwk.exe
local apppath="/v/OpenedFilesView/x64"
local processName="wmpnetwk.exe"
#PATH="$apppath:$PATH" gsudo OpenedFilesView.exe /processfilter "$processName" #通过进程名过滤
PATH="$apppath:$PATH" gsudo OpenedFilesView.exe /wildcardfilter "*.mp4" #通过打开的文件路径/名称通配符来过滤
}
dlnamp4-console() {
#命令行形式下查看DLNA客户端播放的视频文件名(借助OpenedFilesView,但不打开GUI界面)
local tmpDLNAFile="/tmp/tmp-OpenedFilesView-$$.txt"
#trap "rm -vf $tmpDLNAFile" 0
openedfilesview /wildcardfilter '*.mp4' /stab $(cygpath -aw "$tmpDLNAFile")
#输出格式:【文件名】 【文件路径】 【文件创建时间】 【文件修改时间】 【Pid】 【进程名】 【播放进度】
#echo -e "【文件名】\t【文件路径】\t【文件创建时间】\t【文件修改时间】\t【Pid】\t【进程名】\t【进度】"
local output=$(cat "$tmpDLNAFile"|iconv -s -f UTF-16LE -t UTF-8)
[ $(echo "$output"|wc -c) -gt 4 ] && echo "$output"|awk -F '\t' '{print $1"\t"$2"\t"$4"\t"$5"\t"$(NF-7)"\t"$(NF-6)"\t"$(NF-1);}'
[ -f "$tmpDLNAFile" ] && rm -f "$tmpDLNAFile"
}
alias dlnamp4='dlnamp4-console' #查询DLNA客户端正在播放哪一集电视剧
#alias dlnamp4='listdlnafiles .mp4' #查询DLNA客户端正在播放哪一集电视剧,way1
alias dlnafile='listdlnafiles2' #查询DLNA客户端正在播放哪一集电视剧,way2
使用效果: