やっと完成しました。グローバルヒープの概念を理解していなかったのが問題だったみたいです><
返信大変参考にさせていただきました。下記に自動でドロップするモジュールを載せておきます。
なにか問題点などありましたらご指摘お願いいたします。
//----------------------------
//※ドロップ確認用のWindowsAPI
#uselib "shell32"
#func DragAcceptFiles "DragAcceptFiles" int, int
#func DragQueryFile "DragQueryFileA" int, int, int, int
#func DragQueryPoint "DragQueryPoint" int,int
#func DragFinish "DragFinish" int
//----------------------------
//WindowsAPI
#uselib "KERNEL32.DLL"
#func global GlobalAlloc "GlobalAlloc" sptr,sptr
#func global GlobalLock "GlobalLock" sptr
#func global GlobalUnlock "GlobalUnlock" sptr
#uselib "user32.dll"
#func global PostMessageA "PostMessageA" sptr,sptr,sptr,sptr
//Define
#define global GMEM_ZEROINIT $00000040 //メモリの内容を 0 へ初期化
#define global WM_DROPFILES $00000233 //ファイルがドロップされたときに渡されるメッセージ
#define global PostMessage PostMessageA
#module
//p1: ファイルがドロップされるハンドル
//p2: ドロップするファイルのパス
//p3: ウィンドウの左上からのマウス位置X
//p4: ウィンドウの右上からのマウス位置Y
//p5: ファイルパスの形式 0(規定)=Unicode(NT専用) 1=通常の文字列
#deffunc autodrop int p1,str p2,int p3,int p4,int p5
c1=20 + strlen(p2)*4 //DROPFILES構造体のデータサイズ + 文字列
GlobalAlloc GMEM_ZEROINIT,c1 //グローバルヒープのメモリを初期化
hMem=stat //初期化されたメモリアドレスを代入
GlobalLock hMem //グローバルヒープ領域のメモリをロック
p=stat //構造体の先頭のアドレスを取得
dupptr DropFiles,p,c1 //構造体の取得
DropFiles.0=20 //DROPFILES構造体のデータサイズ
DropFiles.1=p3 //マウスX
DropFiles.2=p4 //マウスY
DropFiles.3=1 //ポインタ取得ON
//Unicodeを使うか使わないか指定[p5](バグがあるかも)
if p5=0{
//NT用
DropFiles.4=1
cnvstow DropFiles.5,p2
}else{
//9x用
DropFiles.4=1 //NT系OSの環境ではここを0にするとパスを取得できないらしい
//9x系OSを持っていないので詳細は不明
s3=0 //文字列を数値に変換するための変数をint型に変換
s1=p2 //ファイルパスを変数にする
repeat strlen(p2)
s2=strmid(s1,cnt,1) //一文字だけ取り出す
poke s3,0,s2 //文字列のを取得
memcpy DropFiles.5,s3,1,cnt*2 //アスキー文字コード
memset DropFiles.5,0,1,cnt*2+1 //NULL文字
locnt=cnt
loop
memset DropFiles.5,0,1,locnt*2+2 //一応NULL文字を付加
}
PostMessage p1,WM_DROPFILES,hMem,0 //ドロップメッセージを指定されたウィンドウに送信
GlobalUnlock hMem //メモリ領域のロックを解除
return 1
#global
//画面構成//
title "ファイルをドロップできます"
font msgothic,11
////////////
oncmd gosub *dropfiles,WM_DROPFILES //ドロップされたときにジャンプ
DragAcceptFiles hwnd, 1 //ドロップを受け付ける
//自分自身のウィンドウにメッセージ送信(笑
autodrop hwnd,"C:\\gs\\hsp3\\mod_drag\\hsptmp",123,456,0
stop
//ドロップ情報 Thanks! 774さん
*dropfiles
pos cx,0
dim point,2
sdim path,512
DragQueryPoint wparam, varptr(point)
DragQueryFile wparam, 0, varptr (path), 512
dupptr copy,wparam,4 //wparamが指してるアドレスに入ってるデータをコピー
mes "ハンドルの中身\t"+copy
mes "ファイルパス\t"+path
mes "カーソル位置\t"+point(0)+" "+point(1)
mes
if copy>100{
dupptr copy2,copy,80 //アドレスっぽかったのでさらにコピー
mes "通常 16進数 10進数 上位文字コード 下位文字コード UnicodeOR文字コード配列"
foreach copy2
mes ""+copy2(cnt)+" "+strf("%x",copy2(cnt))+" "+strf("%c",copy2(cnt) >> 16)+" "+strf("%c",copy2(cnt) & 0xffff)+" "+cnvwtos(copy2(cnt))
loop
}else{
dupptr copy2,varptr(copy),80 //アドレスっぽかったのでさらにコピー
mes "通常 16進数 10進数 上位文字コード 下位文字コード UnicodeOR文字コード配列"
foreach copy2
mes ""+copy2(cnt)+" "+strf("%x",copy2(cnt))+" "+strf("%c",copy2(cnt) >> 16)+" "+strf("%c",copy2(cnt) & 0xffff)+" "+cnvwtos(copy2(cnt))
loop
}
DragFinish wparam
cx += 200
return