C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Extended Length Path のD&D​

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■92496 / inTopicNo.1)  Extended Length Path のD&D&#8203;
  
□投稿者/ 夜行初心者S (1回)-(2019/09/30(Mon) 23:56:45)

分類:[C/C++] 

 お世話になります。

【状況】
 OS:Windows 10 x64 1809
 開発:VisualStudio 2013、VC++ MFC
 目的:Extended Length Pathの、エクスプローラからのD&D実装
 問題:パスが正しく取得できない

【詳細】
 以下のディレクトリを作成し、エクスプローラからアプリケーションにD&Dしました。

C:\あいうえお05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7\あいうえお05060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7

 結果、
   (1) WM_DROPFILES が発生しない
   (2) OLEのD&DでならばDropに到達した(※)
 という状態のため、OLEのクラスを使って実装を試みています。
 ところが、上記パスをD&Dすると、

 (a)パスがショートネーム化されているが、これをGetLongPathNameで復元できない
  ショートネーム化されたパスは日本語部分が文字化けしていた。

 (b)さらに長いパス(8500文字を超過)を処理しようとすると、IDataObjectのGetData時点で失敗する
  HRESULTは3
 という2つの問題が発生しました。

 ※IDataObjectにつきましては、OLEの知識が全く無いので、
  サイト「窓プログラミング」様の(OLE DragDrop)に
  公開されていたソースをUnicode化&x64化した物を使いました。

【質問】
Q1 WM_DROPFILESが発生しない原因は、PreTranslateMessageなど、どこかで特定する方法はあるでしょうか?
 ※自分が確認した範囲で、PreTranslateMessageにはメッセージが来ていませんでした。
  これ以前のメッセージのフローについては勉強不足です。;

Q2 (a)、及び(b)に関して、対策方法はないでしょうか?

 存知の方がいましたら、ご教授お願いいたします。
 乱文失礼しました。以上、よろしくお願いいたします。

引用返信 編集キー/
■92497 / inTopicNo.2)  Re[1]: Extended Length Path のD&D&#8203;
□投稿者/ 夜行初心者S (2回)-(2019/10/01(Tue) 08:56:02)
自己レスです。
なにかいじってしまったのか見間違いだったのか、WM_DROPFILES発生確認できました。
お騒がせしました。
ただし、やはりパスはショートパスの状態です。
引き続き、こちらについて解決方法の知恵がありましたりよろしくお願い致します。
引用返信 編集キー/
■92498 / inTopicNo.3)  Re[2]: Extended Length Path のD&D&#8203;
□投稿者/ 夜行初心者S (3回)-(2019/10/01(Tue) 09:15:29)
何度もすみません、再自己レスです。
> なにかいじってしまったのか見間違いだったのか、WM_DROPFILES発生確認できました。

(1)やはり一定以上の長さのパス(手元サンプルでは、8285文字、全てのディレクトリ名が250文字)でメッセージは発生しなくなりました。
(2)8034文字だとメッセージが発生します。なおこのパスをショートネームで表現すると258もじになります。

以上から、ショートネームで表現できなくなるとWM_DROPFILESが発生しなくなるようだという状態でした。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ