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

使用效果:

posted @ 2022-03-13 12:30  晴云孤魂  阅读(225)  评论(0编辑  收藏  举报