Type DROPFILES
pFiles As DWord
pt As POINTAPI
fNC As BOOL
fWid As BOOL
End Type
Const DROPEFFECT_COPY = 1
Const DROPEFFECT_MOVE = 2
Function FileToClipboard(FileName As BytePtr, frag As DWORD) As Long
Dim df As *DROPFILES
Dim hMem As HGLOBAL
Dim p As LPSTR
hMem=GlobalAlloc(GHND,SizeOf(DROPFILES)+lstrlen(FileName)+2)
p=GlobalLock(hMem)
df=p As *DROPFILES
df->pFiles=SizeOf(DROPFILES)
df->pt.x=0
df->pt.y=0
df->fNC=FALSE
df->fWid=FALSE
p+=SizeOf(DROPFILES)
lstrcpy(p,FileName)
p+=lstrlen(p)+1
lstrcpy(p,Chr$(0))
GlobalUnlock(hMem)
Dim hDropEffect As HGLOBAL
Dim pDropEffect As DWordPtr
hDropEffect = GlobalAlloc(GHND, sizeof(DWORD))
pDropEffect = GlobalLock(hDropEffect)
SetDWord(pDropEffect, frag)
GlobalUnlock(hDropEffect)
Dim CF_DROPEFFECT As Long
CF_DROPEFFECT = RegisterClipboardFormat("Preferred DropEffect")
If OpenClipboard(hMainWnd) Then
EmptyClipboard()
SetClipboardData(CF_HDROP,hMem)
SetClipboardData(CF_DROPEFFECT, hDropEffect)
CloseClipboard()
End If
EndFunction
Sub MainWnd_CommandButton1_Click()
FileToClipboard("C:\test.txt", DROPEFFECT_MOVE)
End Sub
Type DROPFILES
pFiles As DWord
pt As POINTAPI
fNC As BOOL
fWid As BOOL
End Type
TypeDef LPDROPFILES = *DROPFILES
Const DROPEFFECT_COPY = 1
Const DROPEFFECT_MOVE = 2
Const CFSTR_PREFERREDDROPEFFECT="Preferred DropEffect"
Function FileToClipboard(ByVal lpszFileName As LPCSTR,ByVal dwFlag As DWord) As BOOL
Dim hDrop As HGLOBAL
Dim pDrop As LPDROPFILES
Dim hDropEffect As HGLOBAL
Dim pdw As *DWord
Dim CF_DROPEFFECT As DWord
'------------------------------------------------------------
' 処理するファイルの情報を書き込む
'------------------------------------------------------------
hDrop=GlobalAlloc(GHND Or GMEM_ZEROINIT,SizeOf(DROPFILES)+lstrlen(lpszFileName)+1)
pDrop=GlobalLock(hDrop) As LPDROPFILES
pDrop->pFiles=SizeOf(DROPFILES)
pDrop+=SizeOf(DROPFILES)
lstrcpy(pDrop As LPSTR,lpszFileName)
GlobalUnlock(hDrop)
'------------------------------------------------------------
' コピーなのか、切り取りなのか設定する
'------------------------------------------------------------
hDropEffect=GlobalAlloc(GHND,SizeOf(DWord))
pdw=GlobalLock(hDropEffect) As *DWord
SetDWord(pdw,dwFlag)
GlobalUnlock(hDropEffect)
'------------------------------------------------------------
' クリップボードに書き込む
'------------------------------------------------------------
CF_DROPEFFECT=RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT)
If OpenClipboard(hMainWnd) Then
EmptyClipboard()
SetClipboardData(CF_HDROP,hDrop)
SetClipboardData(CF_DROPEFFECT,hDropEffect)
CloseClipboard()
Return TRUE
Else
GlobalFree(hDrop)
GlobalFree(hDropEffect)
Return FALSE
End If
End Function