コピーされたファイル名をクリップボードから取得 <TOP>
マイコンピュータやエクスプローラ等でコピーされたファイル名をクリップボードから取得します。
IsClipboardFormatAvalable 指定したフォーマットがクリップボードにあるかどうかの判定
OpenClipboard クリップボードをオープン
GetClipboardData クリップボードから指定のフォーマットのデータを検索
CloseClipboard クリップボードをクローズ
DragQueryFile ドラッグアンドドロップされたファイル名を取得
lstlen 指定された文字列のバイトまたは文字の長さを返す
左:エクスプローラでファイルを全選択しコピー 右:「一覧取得」ボタンによりクリップボードからのファイルを取得
'================================================================ '= コピーされたファイル名をクリップボードから取得 '= (DragQueryFile.bas) '================================================================ #include "Windows.bi" ' 指定したフォーマットがクリップボードにあるかどうか判定 Declare Function Api_IsClipboardFormatAvailable& Lib "user32" Alias "IsClipboardFormatAvailable" (ByVal wFormat&) ' クリップボードをオープン Declare Function Api_OpenClipboard& Lib "user32" Alias "OpenClipboard" (ByVal hWnd&) ' クリップボードから指定フォーマットのデータを検索 Declare Function Api_GetClipboardData& Lib "user32" Alias "GetClipboardData" (ByVal wFormat&) ' クリップボードをクローズ Declare Function Api_CloseClipboard& Lib "user32" Alias "CloseClipboard" () ' ドラッグアンドドロップされたファイル名を取得 Declare Function Api_DragQueryFile& Lib "shell32" Alias "DragQueryFileA" (ByVal hDrop&, ByVal iFile&, ByVal lpszFile$, ByVal cch&) ' 指定された文字列のバイトまたは文字の長さを返す Declare Function Api_lstrlen& Lib "Kernel32" Alias "lstrlenA" (ByVal lpString$) #define CF_HDROP 15 'HDROP型 Var Shared List1 As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= クリップボードにCF_HDROP形式データがあるかどうかの確認 '================================================================ Declare Function ClipboardHasFiles() As Integer Function ClipboardHasFiles() As Integer ClipboardHasFiles = (Api_IsClipboardFormatAvailable(CF_HDROP) > 0) End Function '================================================================ '= Chr$(0)を取り除く '================================================================ Declare Function TrimNull(startstr As String) As String Function TrimNull(startstr As String) As String TrimNull = Left$(startstr, Api_lstrLen(startstr)) End Function '================================================================ '= クリップボードのCF_HDROP形式ファイルデータをListBoxに '================================================================ Declare Sub ClipboardGetFiles() Sub ClipboardGetFiles() Var hCBData As Long 'クリップボード内のデータハンドル Var numFiles As Long 'データの数 Var cbBuffer As Long Var buffer As String Var cnt As Long Var Ret As Long List1.ResetContent 'CF_HDROP形式ファイルデータがある場合 If ClipboardHasFiles() Then 'クリップボードオープン If Api_OpenClipboard(0) <> 0 Then 'クリップボードデータのハンドルを取得 hCBData = Api_GetClipboardData(CF_HDROP) '指定形式のデータが存在する場合 If hCBData <> 0 Then 'ドラッグドロップされたデータ数を取得 numFiles = Api_DragQueryFile(hCBData, -1, ByVal 0, 0) For cnt = 0 To numFiles - 1 cbBuffer = Api_DragQueryFile(hCBData, cnt, ByVal 0, 0) If cbBuffer > 0 Then buffer = Space$(cbBuffer + 1) cbBuffer = Len(buffer) 'Bufferに入ったファイル名を整形(TrimNull)してListBoxに表示 If Api_DragQueryFile(hCBData, cnt, buffer, cbBuffer) > 0 Then List1.AddString TrimNull(buffer) End If End If Next cnt End If 'クリップボードクローズ Ret = Api_CloseClipboard End If End If End Sub '================================================================ '= エクスプローラ等でコピーされたファイル名をクリップボードから取得 '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() ClipboardGetFiles End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End