[ 新規に投稿する ]

こんな使い方ができると嬉しいNo.08746
jun1 さん 20/08/25 00:47 [ コメントを投稿する ]
  ふと、神の啓示的に降って湧いた戯言です。

これは私がキーボート主体だからでしょうが、現在、秀丸ファイラーClas
sic内、またはほかのウインドウになっている秀丸ファイラーClassic間で
も、なんらかのアクションをするにはマウス操作が必須となります。

ファイルを選んだ状態で、タブやウインドウ一覧を表示させられ、選ばれ
たそのウインドウやタブにファイル(ディレクトリ) の要素を右マウス(左
マウスもあるといいなぁ) クリックをしたとメッセージを送れたら、おも
しろくてはかどるなぁと思うようになりました。実際、キーボード主体だ
と、ただファイルをドラグ&ドロップするために一旦マウスに戻るのが億
劫なこともあります。

ちょいと発展させ、ウインドウ一覧取得したうえでそれを表する窓を出し、
そのアプリケーションのウインドウにもファイルである旨のメッセージを
投げます。大きくはコピー・移動、アプリケーションがファイル読み込み
する処理が考えられます。

他アプリケーションではあらかじめわかっていれば、便利なブックマーク
などの機能がありますが、そうでないことも多いでしょう。アプリケーシ
ョンによってはコピー(移動)であったり、エディタならそのファイルが表
示される、DnDでの処理をエミュレートするような気分でしょうか(エミュ
レートと書きましたが実際はメッセージを受け取ったアプリのウインドウ
が判断することだと思います)。

秀丸ファイラーClassicは、 いろいろな方からの要望などで、そこらのフ
ァイラーでは同じことを実現させるのはかなり難しい・無理、 という(個
人的な) 状態にすでになっているので、キーボード主体な人ならば、もっ
と楽しく(意外な使い方もあるかも?)なると、そんな気がしてます。

たわごとなので、「ん? いらんだろ」と言われることになにも思うこと
はないですが、横目で読んでいただければと思っています。ほかのユーザ
さんはどう思われますか?
[ ]
RE:08746 こんな使い方ができると嬉しいNo.08748
秀丸担当 さん 20/08/25 09:11 [ コメントを投稿する ]
 
プログラム的なことですが、「送る」の操作は、マウス操作なしでのドラッグ&ドロップの処理ということになっています。
おそらくエクスプローラなどでも「送る」はそういう仕組みで動いているはずだと思います。
「送る」の一覧だったり、「フォルダへコピー...」のダイアログでもいいかもしれないですが、一覧に現在開いているタブが出てくる機能もあったらいいと思います。
右ボタンのドロップについても、操作方法を用意すれば一応可能だと思います。
そういうネタということにさせていただきます。

他のアプリケーションについては、「送る」のショートカットになるようなものだったら何らかの方法があると思いますが、実際に開いているウィンドウそのものに対してだとマウスカーソルの座標が必要なので、キー操作で置き換えるのは難しそうです。
[ ]
RE:08748 こんな使い方ができると嬉しいNo.08756
jun1 さん 20/08/26 00:54 [ コメントを投稿する ]
  だいぶ前にC#でListViewを遊んでいたときのコードを見てみました。

// ListViewにドロップ要素が入る
private void LView_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))  // ファイル
        e.Effect = DragDropEffects.All;
    else                                              // 要素
        e.Effect = DragDropEffects.Move;
}

// ListView内でドロップ
private void LView_DragDrop(object sender, DragEventArgs e)
{
  ....
    if (e.Data.GetDataPresent(typeof(ListViewItem))) { // ListView内でのDnD
  ....
        ListViewItem dstItem = LView.GetItemAt(p.X, p.Y);
        int dstIdx = LView.Items.IndexOf(dstItem); // ドロップした位置
  ....
    } else {                                  // エクスプローラからドロップ
        //  ドロップ要素を配列にとる
        string[] sDrop = (string[])e.Data.GetData(DataFormats.FileDrop);
        for (int i = 0; i < sDrop.Length; i++)     // メモリに格納していく
  ....

>他のアプリケーションについては、

>実際に開いているウィンドウそのものに対してだとマウスカーソルの座標が必要

遊んでいた際には、エクスプローラからのドロップでマウスカーソルの座
標を使わずにドロップされたアイテムを取得していたので、ドロップ対象
のアプリケーションには座標を渡す必要はないと思われます。

アプリケーションのウインドウ宛へのDnDだけならウインドウ列挙だけに
なる気がします。

しかし、ウインドウ内にあるコンポーネント宛にドロップメッセージを送
るなら、相手アプリケーションのリソースを列挙していきつつそのコンポ
ーネントにドロップのメッセージを送る際に必要なユーザがするコンポー
ネント選択をどのように選択させるのか、 DnDに失敗した際、そのアプリ
ケーションが放さないかぎり秀丸ファイラーClassicに処理が戻ってこな
い可能性もありますし。

単純に、マウスに手を動かすのが軽減される、と思い込んでしまっていま
した。よく考えもせずにすみません。
[ ]
RE:08756 こんな使い方ができると嬉しいNo.08757
さん 20/08/26 07:01 [ コメントを投稿する ]
   こんにちは、横からすみません。

 私も以前にドラッグ&ドロップ操作をエミュレートするような機能を追加していただけないか要望したことがあります。
 しかし、やはり難しいとのことで、断念していました。
 ただ、別のファイラーではその機能が搭載されているので、何か方法はあるんだと思います。
 そのファイラーではドラッグ&ドロップを受け付けるウィンドウをリストボックスで表示して、選択されたウィンドウにドロップするというような仕様だったと思います。

 で、今いろいろ調べてみたら、C#の記事ですが、こんなページを見つけました。

http://bbs.wankuma.com/index.cgi?mode=al2&namber=69699&KLOG=119

 あまり参考にならないかもしれないですが。

 それでは。
[ ]
RE:08757 こんな使い方ができると嬉しいNo.08759
秀丸担当 さん 20/08/26 09:57 [ コメントを投稿する ]
 
jun1さん、陸さん、情報ありがとうございます。
マウスの位置が無くてもできるのですね。
実際のウィンドウが無いとわからないと思ったのは、ウィンドウ内でもドロップする位置がいろいろあって、秀丸ファイラーでもタイトルバー部分や、タブ/フォルダツリ/ファイル一覧の項目1つ1つで全部違うから、秀丸ファイラー内ならともかく、他のアプリだとどこにドロップするのかわからないと思ったためでした。

プログラム的にはやはり「送る」と同じで、「送る」が既にドロップのエミュレートと言ってもいいです。
場所さえわかれば、スクリプトでSendToメソッドでやる方法もあります。
何か私が勘違いしている気がしますが、他のアプリで座標がわからないのにできるというのがやっぱりわからなくて、何らの方法で対象を受け渡しする必要があると思います。
教えていただいたページのサンプルでは、クリップボードを使っての例があるようでしたが、それだとコピー・切り抜き・貼り付けと操作や結果に大差がないような気がします。
右ドロップについては方法が無いので、右ドロップの方法があったら便利だと思います。

[ ]
RE:08759 こんな使い方ができると嬉しいNo.08760
さん 20/08/26 11:25 [ コメントを投稿する ]
   こんにちは。

 もうちょっと調べてみました。

 クリップボードを使わなくても、どうやら、ドロップ可能なコントロールを調べて、「wm_dropfiles」というメッセージを送ってやればよいようです。
 ただ、この方法は非推奨なようで、「DoDragDrop」という方法もあるようです。
 しかし、こちらは、マウス操作をシミュレートする必要があるようです。
 とりあえず、調べてみて今のところわかったのはこんな感じです。
 なかなか難しそうですね。

 それでは。
[ ]
RE:08760 こんな使い方ができると嬉しいNo.08761
秀丸担当 さん 20/08/26 17:02 [ コメントを投稿する ]
 
情報ありがとうございます。
言われている通り、WM_DROPFILESはどちらかというと古い方式で、マウス操作の場合はDoDragDropになると思います。
「送る」の場合はどちらでもなくて、フォルダやファイル項目の場所さえあえれば、ドロップと同じ効果になります。

実用面としては、コピーや移動は既にクリップボードでできるので、右ボタン相当の「送る」(=ドロップ)がキーボードでできたらいいと思うので、そういう機能として検討しようと思います。
簡単には、SendToメソッドにパラメータ追加して、右ボタン相当を指定をできるようにするだけでも、クリップボードやタブの情報を使ったスクリプトを作れたりするのではないかと思います。
[ ]
RE:08761 こんな使い方ができると嬉しいNo.08762
jun1 さん 20/08/26 20:24 [ コメントを投稿する ]
  とても難しいことをお願いして、
大いに恐縮してしまっています。
陸さんにも調べていただき、感謝です。

なににせよ、すでに秀丸ファイラーClassicを
手放せないほど使いやすい機能が実装されており、
今の状態でも十分に高い実用性があることに
変わりありません。
[ ]
RE:08762 こんな使い方ができると嬉しいNo.08763
jun1 さん 20/08/27 01:14 [ コメントを投稿する ]
  >ただ、別のファイラーではその機能が搭載されているので
探してみました。
PPxのCtrl+Dキーでの処理ですね。
なるほどなぁ、と思うUIでした。
[ ]
RE:08763 こんな使い方ができると嬉しいNo.08764
秀丸担当 さん 20/08/27 11:52 [ コメントを投稿する ]
 
PPxは以前にjun1さんとのやりとりで入れたとがありましたが、そういう機能があるとは知りませんでした。
そこまでやるかはわからないですが、参考にさせていただきます。
[ ]
RE:08764 こんな使い方ができると嬉しいNo.08768
jun1 さん 20/08/27 22:56 [ コメントを投稿する ]
  自分はPPxを使わなくなってしまったので、
この機能があると思っていなかったです。
[ ]

[ 新規に投稿する ]