hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
自動ファイルドロップ - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

自動ファイルドロップ

 マウスでファイルをドラッグ&ドロップするように、その動作をプログラム側で行うための モジュールです。HSP掲示板でいろいろと参考にさせていただきました。謝謝<(_ _)>

ソース

  • モジュールとサンプルセットになっています。
fileautodrop.hsp
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
-
|
|
|
|
|
!
 
 
 
 
 
//----------------------------
//※ドロップ確認用の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,dir_exe+"/sample/demo/JP6GIRL.BMP",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

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
fileautodrop.hsp
487件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:45:22 (2436d)