我正在使用Windows XP SP 3,Strawberry Perl。 我想让我的Perl程序的用户选择一个文件;但是当使用Win32 :: GUI :: GetOpenFileName()时,我希望Windows文件选择对话框在“详细信息”文件列表选项中打开,而不是在默认的“列表”文件列表选项中打开。
在网上搜索,似乎我必须使用Windows“钩子”功能,并将某些消息发送到文件选择控件。关于它的文档是MSDN,我似乎并不掌握如何在Perl中应用它。
任何人都可以推荐Perl中应该是正确的调用语法吗?
这是我的代码示例,其中文件选择对话框打开时带有(默认)“列表”选项:
use strict;
use warnings;
use 5.014;
use Win32::Console;
use Win32::GUI();
use autodie;
use warnings qw< FATAL utf8 >;
use Carp::Always;
use Win32API::File::Time qw{:win};
use Image::ExifTool qw(:Public);
use Date::Parse;
# ...
my ( $FileName, $ImageDir, $DIR, $TopDir);
# ...
$TopDir = 'D:\My Documents';
$ImageDir = Win32::GUI::BrowseForFolder( -root => $TopDir, -includefiles => 1,);
unless ($ImageDir) {
say '$DirName not defined after calling Win32::GUI::BrowseForFolder, ',
'Photo date set line'.__LINE__;
exit;
}
else {
say "Identified directory: $ImageDir";
}
# now select a file
$FileName = Win32::GUI::GetOpenFileName( -title => 'Select an image file', -directory => $ImageDir,
-file => "\0" . " " x 256,
-filter => ["Image files (*.jpg)" => "*.jpg;*.jpeg", "All files", "*.*", ],);
unless ($FileName) {
say '$FileName not defined after calling Win32::GUI::GetOpenFileName, ',
'Photo date set line'.__LINE__;
}
else {
say "Identified image file: $FileName";
}
# ...
注意:(有些)类似的帖子:http://www.perlmonks.org/?node_id=989418
答案 0 :(得分:2)
不幸的是,Win32::GUI
API既未公开OFN_ENABLEHOOK
标记位或lpfnHook
选项的GetOpenFileName
字段。
您可以使用Win32::API
模块使其工作在更低级别,但您必须使用OPENFILENAME
自己构建整个pack
结构并编写一些XS钩子处理程序的代码。