掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エクスプローラのコピー、切り取りを判定したい。 (ID:108130)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
私の回答では、『クリップボード系のAPI』を使う方法と、 『FolderItemVerbオブジェクト』を使う方法の2案を出しましたが、 この場合の「そのへんのさわり」とは、どちらの事でしょうか?(^^; とりあえず、APIで取得するなら、 1. 『"Preferred DropEffect"形式のデータ』を取得する。 (RegisterClipboardFormat APIを使って、この識別値を得ます) この形式のデータは、切り取りかコピーかを示すビットフラグです。 &H1 が立っていれば、コピー &H2 が立っていれば、移動 &H4 が立っていれば、ショートカットを作成可能 2. 『CF_HDROP形式のデータ』を取得する。 (識別値の定義は、 Const CF_HDROP = 15 のようになります) この形式のデータは、ファイル名の一覧を示す文字列です。 の2手順にて、必要な情報を得る事ができますので、あとは、 SHFileOperation APIか、もしくはVBのファイル操作ステートメント等で 実際に、それらのファイル郡を操作する事になるでしょう。 (クリップボードAPIの操作方法に付いては、ご自身で調べてみて下さい) 一方、FolderItemVerbオブジェクトを使った方法は、要するに 『 フォルダを右クリックした時のメニュー項目にある [コピー]や[貼り付け]の動作を、VBから指示する。 』 という処理です。 この方法の場合は、クリップボードの内容をVB側で確認する事はありません。 それゆえ、実際にどのファイルが移動(あるいは複写)されるのかまでは VB側では把握しません(把握する必要がありません)。 FolderItemVerbを使う場合は、[Microsoft Shell Controls And Automation]を参照設定した後に、 Dim Path As String Dim oShell As Shell32.Shell Dim oFItem As Shell32.FolderItem Dim oFVerb As Shell32.FolderItemVerb Path = "C:\test\" Set oShell = CreateObject("Shell.Application") Set oFItem = oShell.NameSpace(CVar(Path)).Items().Item() For Each oFVerb In oFItem.Verbs If oFVerb.Name Like "貼り付け*" Then oFVerb.DoIt Exit For End If Next Set oFItem = Nothing Set oShell = Nothing などのようなコードで、貼り付け動作を行います。 なお上記は、参照設定無しでも動作させられますが、その場合は、 Dim oShell As Shell32.Shell Dim oFItem As Shell32.FolderItem Dim oFVerb As Shell32.FolderItemVerb の部分を、全て As Object で宣言するようにしてください。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.