.NET Frameworkhttp://blogs.wankuma.com/tocchann/category/2206.aspx.NET Frameworkとっちゃんja-JP.Text Version 0.95.2004.102とっちゃん.NET Framework 4.6.2 用のブートストラップの問題http://blogs.wankuma.com/tocchann/archive/2016/09/13/538013.aspx2016年9月13日 17:05:00 GMThttp://blogs.wankuma.com/tocchann/archive/2016/09/13/538013.aspxhttp://blogs.wankuma.com/tocchann/comments/538013.aspxhttp://blogs.wankuma.com/tocchann/archive/2016/09/13/538013.aspx#Feedback0http://blogs.wankuma.com/tocchann/comments/commentRss/538013.aspx
http://blogs.wankuma.com/tocchann/services/trackbacks/538013.aspx<p><a title=".NET Framework 4.6.2 用のブートストラップ (setup.exe) の問題" href="https://blogs.msdn.microsoft.com/jpvsblog/2016/09/13/netfx4-6-2bootstrapissue/">.NET Framework 4.6.2 用のブートストラップ (setup.exe) の問題</a></p> <p>ちょっと前に、<a href="https://social.msdn.microsoft.com/Forums/ja-JP/netfxgeneralja/thread/37756671-03e1-4325-81d5-a173baf3ddf1/" target="_blank">MSDNフォーラムで回答したやつ</a>かな。具体的な修正方法(ただし、数字の変更のみ)が日本のサポートチームから出ました。</p> <p>個人的には、Product.xml と Package.xml で環境チェックコードが違ってる部分はどうなの?というのもあるんですけどね。</p> <p>&nbsp;</p> <p>これ、どっちを対象にする場合でもきれいに書き直すとだいぶ変わるぞ?と思いつつ放置だなぁ。。。</p> <p>ちなみに、WiX でインストールされるのは標準では英語版です。日本語版は自前で、ブートストラップセクション書いてあげる必要があります。</p> <p>そういえば、WiX で日本語版 .NET Framework ランタイムをインストールするなんてネタは書いたことがないなぁ。。。需要あるのかなぁ?</p><img src ="http://blogs.wankuma.com/tocchann/aggbug/538013.aspx" width = "1" height = "1" />とっちゃんフォルダ選択ダイアログを WPF アプリから呼び出すhttp://blogs.wankuma.com/tocchann/archive/2013/04/27/327866.aspx2013年4月27日 17:30:00 GMThttp://blogs.wankuma.com/tocchann/archive/2013/04/27/327866.aspxhttp://blogs.wankuma.com/tocchann/comments/327866.aspxhttp://blogs.wankuma.com/tocchann/archive/2013/04/27/327866.aspx#Feedback8http://blogs.wankuma.com/tocchann/comments/commentRss/327866.aspx
http://blogs.wankuma.com/tocchann/services/trackbacks/327866.aspx<p><a href="http://blogs.wankuma.com/tocchann/archive/2013/04/26/327864.aspx" target="_blank">前回</a>は、Windows Forms 用だったので次は、WPF用。違うのはウィンドウハンドルを取得する方法だけ。</p> <p>WPFアプリ用ですが、こちらは、XAMLからは呼べません。ファイルダイアログと同じですね。</p> <p>&nbsp;</p> <p>ってことで、こちらもコードをペタッと。。。</p> <div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7c732d7d-61b3-44bc-a8e4-75a86a39fc69" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre name="code" class="c#">using System; using System.Windows; using System.Windows.Interop; namespace Wankuma.WPF { public class PickupFolderDialog { public PickupFolderDialog() { } public String SelectedPath { get; set; } public bool ShowDialog( Window ownerWindow ) { var hwndSrc = HwndSource.FromVisual( ownerWindow ) as HwndSource; return ShowDialog( hwndSrc.Handle ); } public bool ShowDialog( IWin32Window ownerWindow ) { return ShowDialog( (ownerWindow != null) ? ownerWindow.Handle : IntPtr.Zero ); } public bool ShowDialog() { return ShowDialog( IntPtr.Zero ); } private bool ShowDialog( IntPtr handle ) { var dlg = new Wankuma.PickupFolderDialogCore(); dlg.SelectedPath = this.SelectedPath; if( dlg.ShowDialog( handle ) ) { this.SelectedPath = dlg.SelectedPath; return true; } return false; } } } </pre></div> <p>使い方は、名前空間が違うだけで、Windows FormsでもWPFでも同じなので省略。</p> <p>特筆するようなところもないと思います。</p><img src ="http://blogs.wankuma.com/tocchann/aggbug/327866.aspx" width = "1" height = "1" />とっちゃんフォルダ選択ダイアログを、Form から呼び出すhttp://blogs.wankuma.com/tocchann/archive/2013/04/26/327864.aspx2013年4月26日 13:15:00 GMThttp://blogs.wankuma.com/tocchann/archive/2013/04/26/327864.aspxhttp://blogs.wankuma.com/tocchann/comments/327864.aspxhttp://blogs.wankuma.com/tocchann/archive/2013/04/26/327864.aspx#Feedback2http://blogs.wankuma.com/tocchann/comments/commentRss/327864.aspx
http://blogs.wankuma.com/tocchann/services/trackbacks/327864.aspx<p>ひとつ前のエントリー <a href="http://blogs.wankuma.com/tocchann/archive/2013/04/22/327859.aspx">[C++/CLI]フォルダ選択ダイアログ(コアルーチン)</a> は、コアルーチンと書いてあるように、実際には、Windows Forms または、WPF から呼び出すことを想定して作られています。もちろんそのまま使ってもいいんですが、ちょっと使いにくいですからね。</p> <p>ということで、まずは、簡単な Windows Forms からの呼出し。こちらはなんということはありません。 IWin32Window をパラメータに取るものを用意してやるだけです。これぞWrap!という程度にはペラペラです。</p> <p>作り方はいたって簡単。</p> <ol> <li>C#(VBでもいいけどその場合は移植)のクラスライブラリを作成する</li> <li>System.Windows.Forms と、PickupFolderDialogCoreのクラスライブラリを参照する</li> <li>Class1.cs を、PickupFolderDialog.cs にリネームして下のコードを張り付ける。</li></ol> <p>こちらもわずか3ステップ。</p> <p> <div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6a8bafc1-1973-4ccc-b233-7f9ba8dfcdc4" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre name="code" class="c">using System; using System.Windows.Forms; namespace Wankuma.Forms { public class PickupFolderDialog { public String SelectedPath { get; set; } public bool ShowDialog() { return ShowDialog( null ); } public bool ShowDialog( IWin32Window window ) { return ShowDialog( window.Handle ); } private bool ShowDialog( IntPtr handle ) { var dlg = new Wankuma.PickupFolderDialogCore(); dlg.SelectedPath = SelectedPath; if( dlg.ShowDialog( handle ) ) { SelectedPath = dlg.SelectedPath; return true; } return false; } } } </pre></div></p> <p>アプリケーションからの使い方は</p> <div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:90f562fa-c2b3-4098-aafb-ea0bf62a7daa" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre name="code" class="c#">var dlg = new Wankuma.Forms.PickupFolderDialog(); dlg.SelectedPath = フォルダを保持するオブジェクト; if( dlg.ShowDialog( this ) ) { フォルダを保持するオブジェクト = dlg.SelectedPath; } </pre></div> <p>エラーが出るとしたら、参照し忘れか、this がウィンドウじゃないかのいずれか。後者の場合は、UIスレッド上で呼び出していることを確認した上で、引数なしで呼び出すように変えればOKです。</p> <p>おーっと。。。プログラミングモデルはSTAですのでお忘れなく。。。</p><img src ="http://blogs.wankuma.com/tocchann/aggbug/327864.aspx" width = "1" height = "1" />とっちゃん[C++/CLI]フォルダ選択ダイアログ(コアルーチン)http://blogs.wankuma.com/tocchann/archive/2013/04/22/327859.aspx2013年4月22日 21:50:00 GMThttp://blogs.wankuma.com/tocchann/archive/2013/04/22/327859.aspxhttp://blogs.wankuma.com/tocchann/comments/327859.aspxhttp://blogs.wankuma.com/tocchann/archive/2013/04/22/327859.aspx#Feedback344http://blogs.wankuma.com/tocchann/comments/commentRss/327859.aspx
http://blogs.wankuma.com/tocchann/services/trackbacks/327859.aspx<p>Vista からフォルダ選択ダイアログが変わりました。</p> <p>大半のソフトは、古い形式を使っていますが、今後は少しずつXP非対応アプリも増えてくると思うので、じわじわと新しいフォルダ選択ダイアログが増えていくでしょう。実際 Visual Studio は何気に新しいものを使ってますし。。。</p> <p>が、.NET Framework はまだ対応していません。ということで、だれでも使えるように、コアルーチンだけここに張り付けておきます。</p> <p>作り方は、</p> <ol> <li>C++/CLIで、クラスライブラリプロジェクトを作成する。</li> <li>下記のコードを PickupFolderDialogCore.h と PickupFolderDialogCore.cpp で保存する。</li> <li>プロジェクトをビルドする。</li></ol> <p>以上です。WPFやWindows Forms からの呼出しは、それぞれでラッパーを書いたほうがいいでしょう。</p> <p>理由はウィンドウハンドルの取り方がそれぞれで微妙に異なるからです。</p> <p>説明が必要になるほど複雑なコードじゃないので解説はなし。</p> <p>&nbsp;</p> <p>ということでヘッダー</p> <div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3c6e98b2-4d74-4c65-bc26-5cf39c550aad" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre name="code" class="c">using namespace System; namespace Wankuma { public ref class PickupFolderDialogCore { public: PickupFolderDialogCore(); property System::String^ SelectedPath{ System::String^ get(); void set( System::String^ value ); } bool ShowDialog( System::IntPtr ownerWindow ); private: System::String^ m_selectedPath; }; } </pre></div> <p>続いてソース</p> <div id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:57baa6ac-310c-4701-9be5-500dddd97b2f" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre name="code" class="c">// class PickupFolderDialogCore #include "stdafx.h" #define STRICT #include &lt;ShObjIdl.h&gt; #include &lt;comdef.h&gt; #include &lt;vcclr.h&gt; #pragma comment( lib, "user32.lib" ) #pragma comment( lib, "shell32.lib" ) _COM_SMARTPTR_TYPEDEF(IFileOpenDialog,__uuidof(IFileOpenDialog)); _COM_SMARTPTR_TYPEDEF(IShellItem,__uuidof(IShellItem)); static HWND APIENTRY GetSafeOwnerWindow( HWND hwndOwner ) { if( hwndOwner != nullptr &amp;&amp; !IsWindow( hwndOwner ) ){ hwndOwner = nullptr; } if( hwndOwner == nullptr ){ hwndOwner = GetForegroundWindow(); } HWND hwndParent = hwndOwner; while( hwndParent != nullptr ){ hwndOwner = hwndParent; hwndParent = GetParent( hwndOwner ); } if( hwndOwner != nullptr ){ hwndOwner = GetLastActivePopup( hwndOwner ); } return hwndOwner; } #include "PickupFolderDialogCore.h" Wankuma::PickupFolderDialogCore::PickupFolderDialogCore() { } String^ Wankuma::PickupFolderDialogCore::SelectedPath::get() { return m_selectedPath; } void Wankuma::PickupFolderDialogCore::SelectedPath::set( String^ value ) { m_selectedPath = value; } bool Wankuma::PickupFolderDialogCore::ShowDialog( IntPtr ownerWindow ) { HWND hwndOwner = GetSafeOwnerWindow( static_cast&lt;HWND&gt;( ownerWindow.ToPointer() ) ); IFileOpenDialogPtr dlg( __uuidof(FileOpenDialog) ); dlg-&gt;SetOptions( FOS_PICKFOLDERS|FOS_FORCEFILESYSTEM ); if( String::IsNullOrWhiteSpace( m_selectedPath ) == false ){ cli::pin_ptr&lt;const System::Char&gt; folder = PtrToStringChars( SelectedPath ); IShellItemPtr item; if( SUCCEEDED( SHCreateItemFromParsingName( folder, nullptr, IID_PPV_ARGS( &amp;item ) ) ) ){ dlg-&gt;SetFolder( item ); } } HRESULT hRes = dlg-&gt;Show( hwndOwner ); if( SUCCEEDED( hRes ) ){ IShellItemPtr item; if( SUCCEEDED( (hRes=dlg-&gt;GetResult( &amp;item )) ) ){ wchar_t* folder = nullptr; item-&gt;GetDisplayName( SIGDN_FILESYSPATH, &amp;folder ); SelectedPath = gcnew System::String( folder ); CoTaskMemFree( folder ); return true; } } return false; } </pre></div><img src ="http://blogs.wankuma.com/tocchann/aggbug/327859.aspx" width = "1" height = "1" />とっちゃんSystem.Windows.DataFormats.StringFormat って何者?http://blogs.wankuma.com/tocchann/archive/2010/03/25/187444.aspx2010年3月25日 15:56:00 GMThttp://blogs.wankuma.com/tocchann/archive/2010/03/25/187444.aspxhttp://blogs.wankuma.com/tocchann/comments/187444.aspxhttp://blogs.wankuma.com/tocchann/archive/2010/03/25/187444.aspx#Feedback0http://blogs.wankuma.com/tocchann/comments/commentRss/187444.aspx
http://blogs.wankuma.com/tocchann/services/trackbacks/187444.aspx<p>不可解な動きをするというので、ちょっと調べてみました。</p> <p>調査のために作ったツール(VS2008SP1)</p><iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-34203fdf985a55e5.skydrive.live.com/embedicon.aspx/%e5%85%ac%e9%96%8b/TestClipboard.zip" frameborder="0" marginwidth="0" scrolling="no"></iframe> <p>クリップボードに格納されたもの</p> <p>System.String という名前のバイナリデータ(未確認だけど、BinaryFormatter などでシリアライズされたSystem.Stringオブジェクトと思われる)。</p> <p>相互変換性...なし。</p> <p>当たり前ですね。Windows は、System.String なんてへんてこなフォーマットは知りません。</p> <p>おまけ...</p> <p>System.String というデータ形式は、文字列データ形式ではありません。</p> <p>なので、メモ帳などに貼り付けることはもちろんのこと、Clipboard.GetText() で取り込むこともできません。</p> <p>ごくごく単純でめっちゃ適当なプロジェクトを貼り付けておいたので、興味のあるお方はお試しあれw(バイナリは添付されてませんのであしからず)</p><img src ="http://blogs.wankuma.com/tocchann/aggbug/187444.aspx" width = "1" height = "1" />

AltStyle によって変換されたページ (->オリジナル) /