【发布时间】:2010-08-06 21:32:23
【问题描述】:
我拥有一个 Microsoft Powershell 脚本,它检查以 .wtv 结尾的所有文件(Windows Media Center 录制的电视节目),提取一些元数据(使用名为“Toub.MediaCenter.Dvrms.dll”的 DLL ) 然后将其写入标准输出:
[void][System.Reflection.Assembly]::LoadFile("C:\Toub.MediaCenter.Dvrms.dll")
# Get all files ending in .wtv
foreach ($file in gci "*.wtv")
{
$wtv = New-Object Toub.Mediacenter.Dvrms.Metadata.DvrmsMetadataEditor($file)
$attrlist = $wtv.GetAttributes()
# Extract the Title and Description from the recorded programme
$t = $attrlist["Title"].value
$d = $attrlist["WM/SubTitleDescription"].value
# Print them to STDOUT
"$t"
"$d"
}
目前,我从 Perl 脚本运行它,然后解析结果。它可以工作,但是很混乱,我想放弃 powershell 部分并完全在 Perl 中完成。
但是,我完全不知道如何链接到 DLL,以便我可以在文件上调用 GetAttributes 方法,然后提取 Title 和 的值>WM/SubTitleDescription.
有人指出我使用 Win32::API,但我不知道要从中导入函数的库的名称,也不知道函数的 C 原型。
因此,我的代码停止运行,因为我不确定应该用 Win32::API 做什么。我的(非常基本的)存根如下所示:
use Win32::API;
foreach my $file (glob("*.wtv"))
{
my $wtv = new Win32::API(...stuck here...);
# Complete guesswork from here on...
print $wtv->GetAttributes("Title") . "\n";
print $wtv->GetAttributes("WM/SubTitleDescription") . "\n";
}
我猜想从上面的 Powershell 中可以看出我应该在 new Win32::API 行中添加什么以及是否 $wtv->GetAttributes 是正确的 - 但老实说,我不知道。
有人可以指点我正确的方向吗?
【问题讨论】:
-
谢谢,但我已经阅读了该文档,它告诉我需要知道要从中导入函数的库的名称和函数的 C 原型——两者都不是我知道,因此是这个问题。
标签: perl api winapi powershell metadata