Perl を呼び出すWin32::GUI::BrowseForFolder()
と、デスクトップには (当然のことながら) いくつかの以前のウィンドウが表示されます。BrowseForFolder()
ウィンドウがそれらのウィンドウの後ろに隠れていることがわかりました。プログラムがフォルダ名を要求していることに気付かず、バグがあると思うかもしれないので、これは時々混乱して面倒です。(これは、フォアグラウンドにポップアップする(たとえば) Win32::GUI::GetOpenFileName()
またはとは異なります!)。GetSaveFileName()
私の質問は次BrowseForFolder()
のとおりです。
1 つの可能性は、そのハンドルを見つけて、前景に上げることです。
-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()
ウィンドウは他のウィンドウの後ろに隠れるので、他のウィンドウにアクセスするには最小化する必要があることに注意してください。他のすべての PerlWin32::GUI
ウィンドウはフォアグラウンドで開きます。
さらに、Perlウィンドウ-addexstyle => WS_EX_TOPMOST
では通常効果がありますが、効果がないことに注意してください。Win32::GUI
注:D:\My documents
を既存のディレクトリに変更します。
関連する質問: デスクトップ ウィンドウ ハンドルを見つけるにはどうすればよいですか? のハンドルを見つけることができればBrowseForFolder()
、それを前面に出すことができます。
(注: PerlMonks にクロスポストされた同様の質問: http://perlmonks.org/?node_id=994815 )