當調用Perl Win32::GUI::BrowseForFolder()
時,桌面(自然地)有幾個較早的窗口。事實證明,這些窗口隱藏着BrowseForFolder()
窗口。這有時會令人困惑和煩人,因爲您可能沒有意識到該程序要求您提供文件夾名稱,並且您可能認爲存在錯誤。 (這與(例如)Win32::GUI::GetOpenFileName()
或GetSaveFileName()
不同,它會在前臺彈出!)。BrowseForFolder()窗口未在前臺打開,隱藏(Perl Win32 :: GUI)
我的問題是:如何讓BrowseForFolder()
走到前臺?
一種可能性是找到它的手柄,然後將其提升到前景。
請注意,-addexstyle => WS_EX_TOPMOST
沒有效果(見下文)。
這是一個完整的(可編譯和運行的)代碼示例。 (5.014不是必需的)
use strict;
use warnings;
use 5.014;
use Win32::GUI();
use Win32::GUI qw{ WS_EX_TOPMOST};
my ($InputDir, $TopDir, $InputFileName, $dw, $dh, $desktop, $Window);
$TopDir = 'D:\My documents'; # Change this to an existing direcotry of yours
$desktop = Win32::GUI::GetDesktopWindow();
$dw = Win32::GUI::Width($desktop);
$dh = Win32::GUI::Height($desktop);
$Window = Win32::GUI::Window->new(-name => 'main', -text => 'Main window',
-pos => [20/100*$dw, 20/100*$dh], -size => [50/100*$dw, 60/100*$dh],
-onTerminate => \&TerminateWindow,
-addexstyle => WS_EX_TOPMOST, -dialogui => 1, -tabstop => 1, -cancel => 1,);
$Window -> AddButton (-name => 'ButtonCommit', -pos => [10,10],
-size =>[16/100*$dw,3.5/100*$dh], -text => 'Commit changes', -onClick => \&Commit);
sub Commit {
$InputDir = Win32::GUI::BrowseForFolder(-root => $TopDir, -includefiles => 1,
-title => 'Select directory for parameter file',
-text =>'Selext directory for parameter file',
-size => [50/100*$dw, 50/100*$dh], -addexstyle => WS_EX_TOPMOST,);
$InputFileName = Win32::GUI::GetOpenFileName(-title => 'Select the input file',
-directory => $InputDir, -file => "\0" . " " x 256,
-filter => ["Text files (*.txt)" => "*.txt", "All files", "*.*", ],
-text => 'text Select input file');
} # end sub Commit
$Window ->Show();
Win32::GUI::Dialog();
sub TerminateWindow {
return -1;
}
點擊「提交更改」按鈕,然後最小化主窗口,然後纔看到「隱藏」 BrowseForFolder()
窗口。
請注意,BrowseForFolder()
窗口隱藏在其他窗口的後面,您需要最小化其他窗口才能到達它。所有其他Perl Win32::GUI
窗口在前臺打開。
此外,請注意-addexstyle => WS_EX_TOPMOST
沒有效果,但它通常在Perl Win32::GUI
窗口中。
注意:將D:\My documents
更改爲現有目錄。
相關問題:如何找到桌面的窗口句柄?如果我們能找到BrowseForFolder()
的句柄,我們可以將它提升到前臺。
(注:類似的問題,同時張貼在PerlMonks:http://perlmonks.org/?node_id=994815)