Windowsプログラミングについて質問です。
自分の好きな拡張子のファイルアイコンにドラッグドロップの動作を付けたいと思っています。
レジストリにShellEx\DropHandlerを追加して、CLSIDを書きこめばできるっぽいという所まではわかりました。
ですがどのようなプログラムを組めばよいのか、それ以上わかりません。
MSDNライブラリを眺めてもIPersistFileとかIDropTargetとかを
使えば良さそうな感じなのか?というような程度しかわかりませんでした。
具体的にはドロップされた対象のフルパスとドロップされたファイルのフルパスのリストを得たいのですが、
わかりづらい質問内容かもしれませんが、どなたか教えていただけないでしょうか?
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ちょっとわかりづらい質問です。
。。ウィンドウにドロップされたファイルのパスを取得するのであれば、DragAcceptFiles関数、DragQueryFile関数を調べてみてください。
IPersistFileとかIDropTargetについてはパスです。
この回答への補足
ウインドウにドロップするのではなく、
エクスプローラ上にあるアイコンにドロップしたいんです。
それも.exeにじゃなくて、自分が指定した拡張子のファイルに。
例えばa.txtのアイコンの上にb.txtをドロップさせたら
このソフトが起動して二つのファイルの内容を連結したものがa.txtに書きこまれた状態でメモ帳が起動する・・・
とかをやりたいんです。
ATLとかCOMとかの話しだと思うのですが、
どうもよくわからなくて・・・
No.2
- 回答日時:
それってごく一般的に、自作アプリケーションにドラッグ&ドロップ
ってことですよね?
ご使用のライブラリはATLってことでよいでしょうか。
アプリケーション一個丸ごとATLで作ってるのでしょうか?
それとも、自作COMコンポーネントでDrag&Drop動作の
サポートのため・・・ということでしょうか。
IPersistFileは多分関係ないと思います。
IDropTargetインターフェイスを継承して、
RegisterDragDropで目的のウインドウをターゲットとして
登録してください。
その後、IDropTargetのDropメソッドを実装してください。
引数にIDataObjectのポインタがありますので、
こいつにアクセスしてGetDataメソッドを起動し、STGMEDIUM構造体へのポインタを得てください。
STGMEDIUM構造体にファイル名を示すメンバがありますよね?
私はやったことないので、ちょっとこれで上手く行くか断言出来ませんが
私がMSDNから読み取れるのはこの程度です。
あとはCOMコンテナにイベントをFireするなり何なりお好きに
いじればいいと思います。
この回答への補足
>自作アプリケーションにドラッグ&ドロップ
とは違うんですけど、同じ処理で問題無いということでしょうか?
>目的のウインドウをターゲットとして登録してください
下記の補足に書いた例でいうと、
「目的のウインドウ」とはa.txtとb.txtが表示されている
エクスプローラのウインドウのことでいいのでしょうか?
それとついでなのですが、
DropメソッドとDoDragDropメソッドの違いが
HELPからあまりよく理解できませんでした・・・
もしよければこの違いも教えていただけないでしょうか?
No.3
- 回答日時:
Microsoft PowerToysのSendTo Extensionsが実行ファイル以外のものに、ファイルを送るとかいう機構を使っているようなので、参考にならないかな(じしんなし)。
参考URL:http://plaza7.mbn.or.jp/~suto/pt.htm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 画像編集・動画編集・音楽編集 Windowsに付属しているビデオエディター。BGMを追加する方法は? 1 2022/06/26 08:54
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(ソフトウェア) コマンドプロンプトについて教えてください。 状況: 画像編集ソフト上でネットから保存した画像を使うの 3 2022/05/26 11:14
- フリーソフト イーファンビューでwebpファイルが開けません 1 2022/07/12 07:07
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(買い物・ショッピング) 壁掛け金具の内容について 1 2022/05/30 21:52
- その他(メンタルヘルス) 【私は精神病でしょうか…?マイルールで生活を縛り付けてしまいます】 1 2022/04/15 11:20
- フリーソフト Windowsのフリーソフト「拡張コピー」のタイムスタンプ関係の仕様は、タイムゾーンを反映しますか? 2 2022/06/21 02:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでパワーシェルを実行したい...
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
SaveAsの保存先について
-
【VB.NET】App.configにファイ...
-
エクセルVBAで一つ上の階層...
-
EXCEL(VBA)で指定フォルダ内の...
-
AccessからExcel最小化
-
VB2005 でパス名が誤っていない...
-
Excel 相対パス
-
パスワード保護されたExcelファ...
-
VBAでテキストファイル中の文字...
-
Excel VBAでテキストファイルを...
-
CreateProcess error=0
-
ListViewにSETしたファイル...
-
指定したフォルダ内の最新ファ...
-
VBAで、VBのapp.pathと同じ機能...
-
ExcelのVBAで上書き保存を確...
-
iniファイルのパス取得m_pszPro...
-
FolderBrowserDialogについて-2
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報