掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
エクスプローラのコピー、切り取りを判定したい。 (ID:108128)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> VBのクリップボードメソッドでは、取得できなかったのですが? VB.NETですか? ならばこんな感じで。 Dim DataObject As System.Windows.Forms.IDataObject DataObject = Clipboard.GetDataObject() Dim DropEffect As Object = DataObject.GetData("Preferred DropEffect") If TypeOf DropEffect Is System.IO.MemoryStream Then Dim Stm As System.IO.MemoryStream = DirectCast(DropEffect, System.IO.MemoryStream) Dim Effect As Integer = BitConverter.ToInt32(Stm.ToArray(), 0) Const DROPEFFECT_NONE As Integer = 0 Const DROPEFFECT_COPY As Integer = 1 Const DROPEFFECT_MOVE As Integer = 2 Const DROPEFFECT_LINK As Integer = 4 If (Effect And DROPEFFECT_COPY) <> 0 Then Trace.WriteLine("コピー") End If If (Effect And DROPEFFECT_MOVE) <> 0 Then Trace.WriteLine("切り取り") End If If (Effect And DROPEFFECT_LINK) <> 0 Then Trace.WriteLine("ショートカット") End If End If Dim Files As Object = DataObject.GetData(DataFormats.FileDrop) If TypeOf Files Is String() Then Dim X As String For Each X In DirectCast(Files, String()) Trace.WriteLine(X) Next End If VB6以下の場合は、Clipboardオブジェクトからは取得できません。 クリップボードにあるかどうかの確認だけならば、 Const CF_HDROP = 15 If Clipboard.GetFormat(15) Then などで行えますが、どうしてもファイル名を取得したいなら、 クリップボード系のAPIを使う必要があります。 ただし、『FolderItemVerbオブジェクト』を使えば、 「コピー」「切り取り」「貼り付け」を実行する事はできますので、 VB6でも、APIを使わずに済ます事は可能です。 > エクスプローラ上で切り取り、コピーは、単純にパスを覚えているだけのような気がしますが。 ファイル名の一覧は、CF_HDROP形式のクリップボードデータとして保持されています。 また、これらとは別に、切り取りかコピーか(そしてショートカットを作成可能か)の情報として、 "Preferred DropEffect"というデータも同時に保持されています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.