掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WM_DROPFILEメッセージの引数の構造体は? (ID:84999)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
名前さん回答ありがとうございます。 さっそくリンク先のページを参考にして処理を組んでみましたが、思うように動作しませんでした。 何か解釈を誤っていると思うのですが。作った処理は以下のとおりです。 DROPFILES構造体はC表記で typedef struct _DROPFILES { DWORD pFiles; POINT pt; BOOL fNC; BOOL fWide; } DROPFILES, *LPDROPFILES; でした。そこでVBで以下のように宣言し Private Type POINTAPI x As Long y As Long End Type Private Type DROPFILES pFiles As Long pt As POINTAPI fNC As Boolean fWide As Boolean End Type 下記処理でメッセージを送ってみました。ターゲットのウィンドウハンドルは今はSpy++で探して直接指定しています。 Dim stDrop As DROPFILES Dim lngCnt As Long Dim i As Long Dim strFiles As String Dim lngHDROP As Long Dim lngPDROP As Long Dim strFile() As String stDrop.pt.x = 20 'クライアント領域のドロップする座標を指定 stDrop.pt.y = 20 stDrop.fNC = False 'ptはターゲットウィンドウのクライアント領域の座標を指示 stDrop.fWide = True 'ファイル名はUnicode文字列 stDrop.pFiles = 4& + 8& + 2& 'ファイル名の先頭領域のオフセット lngCnt = ImPrv.GetSelectedPictures(strFile) 'strFile()にはファイルの一覧がセットされる If lngCnt = 0 Then Exit Sub 'ファイルが何も取得されていなければ終了 For i = 0 To lngCnt - 1 strFiles = strFile(i) & ChrB$(0) 'ファイル名の最後にNull文字を追加してstrFilesに足してゆく Next strFiles = strFiles & ChrB$(0) '全てのファイルの最後にさらにNull文字を追加 lngHDROP = GlobalAlloc(GHND, stDrop.pFiles + LenB(strFiles)) 'DROPFILES構造体の領域確保 lngPDROP = GlobalLock(lngHDROP) 'DROPFILESのヘッダー部をコピー CopyMemory ByVal lngPDROP, stDrop, stDrop.pFiles 'ファイルリストの部分をコピー CopyMemory ByVal (lngPDROP + stDrop.pFiles), ByVal strFiles, LenB(strFiles) GlobalUnlock lngPDROP 'ターゲットウィンドウにメッセージを投げる SendMessage &H1480510, WM_DROPFILES, lngHDROP, ByVal 0& しかし、ターゲットウィンドウには何も変化がなく、ターゲットウィンドウがまずいのか それともDROPFILES構造体の記述が悪いのか切り分けができていません。 そこで上記処理中でDROPFILES構造体を作成していく上で何か間違っているところがないのかを 考えています。 考えられる点は 1.pFiles(Offset of the file list from the beginning of this structure, in bytesと書いてありました) の値が14で良いのか?Booleanは1バイト? 2.ファイル名一覧の作り方が正しいのか?(ファイル名の区切りは1バイトのヌルキャラで良いのか?) 3.Unicode文字の扱い方は正しいのか? だと思うのですが、何かお気付きの点があればご指摘ください。 長文になりましたが、よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.