如何在 windows 上使用 perl 调用系统文件选择对话框?
How to call a system file selection dialog using perl on windows?
我知道许多基于 perl 的 gui 模块可以轻松做到这一点,但我对 Prima 或 [=19= 以外的方法很好奇]Tk等
我想为命令行包调用此对话框(完全看起来像 Windows Explorer)。
是否有类似于system('');
命令的东西。
请注意,我需要通过 perl 打开并处理由此类对话框选择的 file/s。
这并不容易,首先您必须构建 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 ();
或者使用一些有用的选项,例如过滤、起始目录和 window 标题。
# 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 的 gui 模块可以轻松做到这一点,但我对 Prima 或 [=19= 以外的方法很好奇]Tk等
我想为命令行包调用此对话框(完全看起来像 Windows Explorer)。
是否有类似于system('');
命令的东西。
请注意,我需要通过 perl 打开并处理由此类对话框选择的 file/s。
这并不容易,首先您必须构建 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 ();
或者使用一些有用的选项,例如过滤、起始目录和 window 标题。
# 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 );