FolderBrowserDialogがWindows7環境で選択されたFolderを適切ないように表示事象

一つの銀行内部システムがUpdateして、そもそもXPシステムの場合、順調で来たのに。

Windows7の場合、 FolderBrowserDialogがうまく動作してなかった。

調べて結果が、仕方ない。Windows Systemの既存Bugです。

色々調査を書けて、結論として二つの対応方針があります。

1、Windowチーム開発されたWindowsAPICodePack をDownloadして、

そのMicrosoft.WindowsAPICodePack.Dialogsを参照して、下記の例にするばよい。

CommonOpenFileDialog dialog = new CommonOpenFileDialog();

dialog.InitialDirectory = @"C:\Users\wangj\Documents\WeChat Files\wxid_mw93g8weqm3e11\Msg";

dialog.IsFolderPicker = true;

if (dialog.ShowDialog() == CommonFileDialogResult.Ok)

{

textBox1.Text = dialog.FileName;

}

2、Windows APIを利用して。

public static class FolderBrowserLauncher

{

/// <summary>

/// Using title text to look for the top level dialog window is fragile.

/// In particular, this will fail in non-English applications.

/// </summary>

const string _topLevelSearchString = "Browse For Folder";

/// <summary>

/// These should be more robust.  We find the correct child controls in the dialog

/// by using the GetDlgItem method, rather than the FindWindow(Ex) method,

/// because the dialog item IDs should be constant.

/// </summary>

const int _dlgItemBrowseControl = 0;

const int _dlgItemTreeView = 100;

[DllImport("user32.dll", SetLastError = true)]

static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]

static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);

[DllImport("user32.dll", CharSet = CharSet.Auto)]

static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

/// <summary>

/// Some of the messages that the Tree View control will respond to

/// </summary>

private const int TV_FIRST = 0x1100;

private const int TVM_SELECTITEM = (TV_FIRST + 11);

private const int TVM_GETNEXTITEM = (TV_FIRST + 10);

private const int TVM_GETITEM = (TV_FIRST + 12);

private const int TVM_ENSUREVISIBLE = (TV_FIRST + 20);

private const int WM_CLOSE = 0x0010;

/// <summary>

/// Constants used to identity specific items in the Tree View control

/// </summary>

private const int TVGN_ROOT = 0x0;

private const int TVGN_NEXT = 0x1;

private const int TVGN_CHILD = 0x4;

private const int TVGN_FIRSTVISIBLE = 0x5;

private const int TVGN_NEXTVISIBLE = 0x6;

private const int TVGN_CARET = 0x9;

/// <summary>

/// Calling this method is identical to calling the ShowDialog method of the provided

/// FolderBrowserDialog, except that an attempt will be made to scroll the Tree View

/// to make the currently selected folder visible in the dialog window.

/// </summary>

/// <param name="dlg"></param>

/// <param name="parent"></param>

/// <returns></returns>

public static DialogResult ShowFolderBrowser(FolderBrowserDialog dlg, IWin32Window parent = null)

{

DialogResult result = DialogResult.Cancel;

Thread t3 = new Thread(() =>

{

int i = 30;

while (i>0)

{

i--;

System.Threading.Thread.Sleep(100);

IntPtr hwndDlg = FindWindow((string)null, _topLevelSearchString);

if (hwndDlg != IntPtr.Zero)

{

IntPtr hwndFolderCtrl = GetDlgItem(hwndDlg, _dlgItemBrowseControl);

if (hwndFolderCtrl != IntPtr.Zero)

{

IntPtr hwndTV = GetDlgItem(hwndFolderCtrl, _dlgItemTreeView);

if (hwndTV != IntPtr.Zero)

{

IntPtr item = SendMessage(hwndTV, (uint)TVM_GETNEXTITEM, new IntPtr(TVGN_CARET), IntPtr.Zero);

if (item != IntPtr.Zero)

{

//SendMessage(hwndTV, WM_CLOSE, IntPtr.Zero, item);

SendMessage(hwndTV, TVM_ENSUREVISIBLE, IntPtr.Zero, item);

//if(i>20)

//    SendMessage(hwndTV, 0x0000, IntPtr.Zero, IntPtr.Zero);

//retries = 0;

//SendKeys.Send("{TAB}{TAB}{RIGHT}");

}

}

}

}

}

});

t3.Start();

result = dlg.ShowDialog(parent);

return result;

}

}

时间: 2024-11-15 09:45:42

FolderBrowserDialogがWindows7環境で選択されたFolderを適切ないように表示事象的相关文章

ASP.NET MVC + MySQL で開発環境構築

from:http://qiita.com/midori44/items/ef7cdd1d37c353e44b5f ASP.NET MVC & EntityFramework によるコードファースト開発環境を MySQL で構築してみます.と言っても今回はプロジェクトを作成して ASP.NET Identity によるユーザー認証を MySQL で動かすところまで. (2015.10.22 追記)Visual Studio 2015 + .NET Framework 4.6 でも動作確認.現在

安裝 Rails 開發環境

安裝 Rails 開發環境 Give someone a program, you frustrate them for a day; teach them how to program, you frustrate them for a lifetime. - David Leinweber https://ihower.tw/rails4/installation.html 在這一章中,我們將介紹如何安裝Ruby on Rails的開發環境.開發Rails的環境需要: Ruby 1.9.3以

IOSアプリケーション開発環境の構築

IOSアプリケーション開発環境の要求 1) IOSシステムの構造はそのようになっています: 2) ハードウエアの方の要求: コンピューター a)    デュアルコアCPU b)    8 gメモリ(開発環境は非常にメモリを消耗します) を勧め:mac book pro スマートフォン を勧め:iphone 5+ 3) ソフトウェアの方の要求: OS X 10.9.3+ Xcode 6.0+ iOSアプリ開発は.Xcodeという開発環境上で行います.Xcode上でプログラミング言語を用いてコードを

【Linux Ubuntu】安裝 Java SE Development Kit(JDK)並配置環境變量

下載頁面:http://www.oracle.com/technetwork/java/javase/archive-139210.html 打開“Java SE 7”,再打開“Java SE Development Kit 7u80”,選擇“Accept License Agreement”同意 Oracle Binary Code License Agreement for Java SE,點擊對應版本開始下載. 終端輸入以下命令: 1 # 創建 JDK 目錄,-p 爲創建多個目錄 2 $

免安裝、免設定的 Hadoop 開發環境 - cloudera 的 QuickStart VM

cloudera 的 QuickStart VM,為一種免安裝.免設定 Linux 及 Hadoop,已幫你建好 CDH 5.x.Hadoop.Eclipse 的一個虛擬機環境.下載後解壓縮,可直接以 VirtualBox.VMWare.Docker.KVM 任一虛擬機,開啟 Hadoop 2.x 執行環境,並可用內建本地模式的 Eclipse 開發工具,開發.執行 Hadoop 程式碼. 下載點 :http://www.cloudera.com/downloads.html?productID

設定MacOS 終端機環境 (Homebrew/zsh/oh-my-zsh/iTerm2)

安裝Homebrew 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 更新Homebrew 1 brew update 安裝wget 1 brew install wget 安裝zsh 1 brew install zsh 更新zsh 1 brew upgrade zsh 修改預設shell為zsh 1 $ chsh -s /usr/local/bin

[Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)

原文地址: http://www.dotblogs.com.tw/maplenote/archive/2012/07/20/apache24_httpd_conf.aspx 整理一下 Windows 環境 從 Apache 2.2 改成 Apache 2.4.1 後 httpd.conf 的設定筆記及遇到的問題 若有興趣可以先看一下官方文件說明 2.4 的差異 ( 我當然是...沒有看完 Orz ) http://httpd.apache.org/docs/2.4/upgrading.html

linux配置java環境變量

首先先root,然後vim /etc/profile修改文件. 在最後面添加下面幾句(當然,路徑是你自己的路徑,或者JDK版本是不一樣). 之後在終端裏輸入 source /etc/profile 這樣配置文件才能立馬生效. 配置JAVA_HOME的用處的方便其他需要JDK的軟件的使用,例如tomcat. linux配置java環境變量,布布扣,bubuko.com

Selenium自動化測試(Python+VS2013)-基礎篇-環境安裝

Python+VS2013環境安裝 http://www.cnblogs.com/aehyok/p/3986168.html PTVS: http://microsoft.github.io/PTVS/ Python: https://www.python.org/downloads/release/python-344/ Python下安裝Selenium 運行-->cmd 切換到pip目錄(C:\Python34\Scripts) cd C:\Python34\Scripts pip ins