サブクラス化に挑戦したのですが、ウィンドウプロシージャが取得できないようだし、
エクスプローラにDragAcceptFiles以外でD&D可と設定されているようなので、失敗しました。
一応ソース乗せときます。
#include "user32.as"
#include "shell32.as"
#include "hscallbk.as"
#uselib ""
#func ExpWndProc "" int,int,int,int
setcallbk Proc,ExpWndProc, *MyExpWndProc//コールバック関数の登録
GetWindowLong hwnd,-4:WndProc=stat//ウィンドウプロシージャのアドレス
exec "C:\\Windows\\explorer.exe"
wait 100
FindWindow "CabinetWClass","ライブラリ":hCabinetWClass=stat//エクスプローラーのウィンドウハンドル
DragAcceptFiles hCabinetWClass,1//D&Dできるようにする
GetWindowLong hCabinetWClass,-4:OldWndProc=stat
SetWindowLong hCabinetWClass,-4,WndProc//ウィンドウプロシージャのアドレスをエクスプロラーに設定
mes "hWnd:"+strf("0x%08X",hCabinetWClass)
stop
*MyExpWndProc
if callbkarg(1)==0x0223{//D&D検知
goto *OnDropFiles
}else:if callbkarg(1)==0x0012{//エクスプローラ終了時
CallWindowProc OldWndProc,callbkarg(0),callbkarg(1),callbkarg(2),callbkarg(3)
end
}else{//それ以外のは元に戻しておく
CallWindowProc OldWndProc,callbkarg(0),callbkarg(1),callbkarg(2),callbkarg(3)
}
return
*OnDropFiles//ファイルがドロップされた
hDrop = wParam
DragQueryFile hDrop, -1, 0, 0
nDrop = stat
sdim filename, 260
repeat nDrop
DragQueryFile hdrop, cnt, varptr(filename), 260
mes filename
loop
DragFinish hDrop//D&D情報をクリア
return