by bee » 2006年12月10日(日) 16:45
http://www.activebasic.com/forum/viewto ... 5%D4%A1%BC
こちらの7さんの記事を参考にファイルの「切り取り」に挑戦しています。
パスと一緒に"Preferred DropEffect"でコピーか貼り付けかを指定して
クリップボードに貼り付ければいいらしく、一応プログラムで切り取って、
エクスプローラ上で貼り付ける事はできました。
ただ、普通切り取ってから貼り付けられた場合はクリップボードが空になるはずですが、
それが起きず残ったままになってしまいます。
貼り付ける時にエクスプローラが勝手にクリップボードの中身をクリアしてくれるものだと思っていたのですが…。
こちらでクリアしなければいけないものなのでしょうか?(切り取ったファイルを監視する等??)
もしくは下記ソースがおかしいのでしょうか?もし分かる方がいらっしゃいましたらご教示ください。
よろしくお願いします。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
コード: 全て選択
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
http://www.activebasic.com/forum/viewtopic.php?t=1590&highlight=%A5%B3%A5%D4%A1%BC
こちらの7さんの記事を参考にファイルの「切り取り」に挑戦しています。
パスと一緒に"Preferred DropEffect"でコピーか貼り付けかを指定して
クリップボードに貼り付ければいいらしく、一応プログラムで切り取って、
エクスプローラ上で貼り付ける事はできました。
ただ、普通切り取ってから貼り付けられた場合はクリップボードが空になるはずですが、
それが起きず残ったままになってしまいます。
貼り付ける時にエクスプローラが勝手にクリップボードの中身をクリアしてくれるものだと思っていたのですが…。
こちらでクリアしなければいけないものなのでしょうか?(切り取ったファイルを監視する等??)
もしくは下記ソースがおかしいのでしょうか?もし分かる方がいらっしゃいましたらご教示ください。
よろしくお願いします。
[hide]
[code]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
[/code][/hide]