perl - 如何在 Windows 上使用 perl 调用系统文件选择对话框?

标签 perl file-handling filehandle filehandler fileopendialog

我知道许多基于 perl 的 gui 模块可以轻松做到这一点,但我对 PrimaTk 等方法很好奇
我想将此对话框(与 Windows 资源管理器完全相同)称为命令行包。

是否有类似于 system(''); 命令的可能。

请注意,我需要通过 perl 打开并处理此类对话框选择的文件。

最佳答案

这并不容易,首先您必须构建 OpenFileDialog api 所需的数据结构,在低级别与系统交互,跟踪文件句柄,然后获取并解析结果结构。

有一些可怕的技巧,您可以在其中保存 Windows 脚本,然后按照您的建议使用系统从 perl 运行它。请记住,这需要正确的权限和安装的脚本语言。

# From http://www.pcreview.co.uk/threads/launching-a-search-explorer-exe-form-the-command-line.1468270/
system( q{"echo CreateObject("Shell.Application").FindFiles >%temp%\myff.vbs"} ); #setup script
my @files = system( "cscript.exe //Nologo %temp%\myff.vbs" ); # Get files
system( "del %temp%\myff.vbs" ); # Cleanup

Win32::GUI 的作者在简化方面做得很好,

my @file = Win32::GUI::GetOpenFileName ();

或者使用一些有用的选项,例如过滤、起始目录和窗口标题。

# A simple open file with graphic filers
my ( @file, $file );
my ( @parms );
push @parms,
  -filter =>
    [ 'TIF - Tagged Image Format', '*.tif',
      'BMP - Windows Bitmap', '*.bmp',
      'GIF - Graphics Interchange Format', '*.gif',
      'JPG - Joint Photographics Experts Group', '*.jpg',
      'All Files - *', '*'
    ],
  -directory => "c:\\program files",
  -title => 'Select a file';
push @parms, -file => $lastfile  if $lastfile;
@file = Win32::GUI::GetOpenFileName ( @parms );

关于perl - 如何在 Windows 上使用 perl 调用系统文件选择对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30251227/

相关文章:

perl - 当我处理带有文件句柄的多行字符串时,如何避免 Perl::Critic 警告?

c - fprintf 不写任何东西

html - 修复带有双引号的 HTML 属性值

perl - 如何获得对Perl的grep返回的列表的引用?

c++ - 在 C++ 中使用链表处理文件

c - 读取文件特定部分时出现问题

csv - 我可以使用 Text::CSV_XS 来解析 csv 格式的字符串而不将其写入磁盘吗?

regex - 如何强制复赛?

regex - 使用正则表达式在 html 文件中搜索随机字符串

c# - 就地修改 XML 文件?