sub BrowseForFolder { undef $Win32::FileOp::Error; my ($hwndOwner, $pidlRoot, $pszDisplayName, $lpszTitle, $nFolder, $ulFlags, $lpfn, $lParam, $iImage, $pszPath) = (GetWindowHandle(), "\0"x260, "\0"x260, shift() || "\0", shift() || 0, (shift() || 0) | 0x0000, 0, 0, 0, "\0"x260); $nFolder = CSIDL_DRIVES() unless defined $nFolder; .... #### sub BrowseForFolder { undef $Win32::FileOp::Error; my ($pidlRoot, $pszDisplayName, # removed first var $lpszTitle, $nFolder, $ulFlags, $lpfn, $lParam, $iImage, $pszPath, $hwndOwner) # and put it last = ("\0"x260, "\0"x260, shift() || "\0", shift() || 0, (shift() || 0) | 0x0000, 0, 0, 0, "\0"x260, shift()); $hwndOwner = GetWindowHandle() unless defined $hwndOwner; #added for if $hwndOwner is undef $nFolder = CSIDL_DRIVES() unless defined $nFolder; #### my $windowid = hex ($main_window -> id); my $dir = BrowseForFolder("Relative to \$main_window", undef, undef, $windowid); #### title => ... filters => ... defaultfilter => ... dir => ... handle => ... options => ... etc... #### my $windowid = hex ($mw -> id); my $directory = BrowseForFolder ( -title => "Choose Directory:", -CSIDL_opt => 'CSIDL_DRIVES, -BIF_opts => 'BIF_RETURNFSANCESTORS', -open_folder => 'C:\Perl\site\lib\Win32', -handle => $windowid, );