掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WM_DROPFILEメッセージの引数の構造体は? (ID:85004)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
hatahataさん、サンプルの提供ありがとうございました。 そこから、最初のコードではUnicode文字を使用する場合は終端文字もNull1バイトではないという ことが分かりました。 それを修正して、とりあえずメモ帳をターゲットとしてファイルをドロップすることは成功しました。 以下に最初のコードを修正したものを記します。 '構造体定義 Private Type POINTAPI x As Long y As Long End Type Private Type DROPFILES pFiles As Long pt As POINTAPI fNC As Long fWide As Long End Type 'ドロップ処理 Private Sub mnuDropFiles_Click() Dim stDrop As DROPFILES Dim lngCnt As Long Dim i As Long Dim lngHDROP As Long Dim lngPDROP As Long Dim bytD() As Byte Dim lngSize As Long Dim strFile() As String 'ドロップするファイルパスの配列 'strFile()にはファイルの一覧がlngCntには取得した配列の大きさがセットされる lngCnt = ImPrv.GetSelectedPictures(strFile) If lngCnt = 0 Then Exit Sub 'ファイルが何も取得されていなければ終了 stDrop.pt.x = 10 'クライアント領域のドロップする座標をセット stDrop.pt.y = 10 stDrop.fNC = 0 'ptはクライアント領域の座標を指示 stDrop.fWide = 1 'ファイル名はUnicode文字列 stDrop.pFiles = 4& + 8& + 4& + 4& 'ファイル名の先頭領域のオフセット For i = 0 To lngCnt - 1 lngSize = lngSize + LenB(strFile(i)) + 2 '文字列+終端文字の長さを足してゆく Next lngSize = lngSize + 2 '文字列の最後の終端文字の長さを足す lngHDROP = GlobalAlloc(GHND, stDrop.pFiles + lngSize) 'DROPFILES構造体の領域確保 lngPDROP = GlobalLock(lngHDROP) 'DROPFILESのヘッダー部をコピー CopyMemory ByVal lngPDROP, stDrop, stDrop.pFiles 'ファイルリストの部分をコピー lngPDROP = lngPDROP + stDrop.pFiles For i = 0 To lngCnt - 1 bytD = strFile(i) CopyMemory ByVal lngPDROP, bytD(0), UBound(bytD) + 1 + 2 lngPDROP = lngPDROP + UBound(bytD) + 1 + 2 Next GlobalUnlock lngHDROP '&H50061Eはメモ帳のウィンドウハンドル(Spy++で調べ、とりあえず直接指定) PostMessage &H50061E, WM_DROPFILES, lngHDROP, 0& End Sub ただし、私が目的とするターゲットアプリケーションのドロップにはまだ成功していません。 あとはターゲットウィンドウを探すだけだと思いますので、ひとまず解決とさせていただきます。 >hatahataさんへ きたないソースですがご参考になりましたでしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.