HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0219
いなえ他のソフトのウィンドウへのD&D7解決


いなえ

リンク

2010/2/19(Fri) 13:58:27|NO.30734

単刀直入に質問します。

HSPで生成しているウィンドウから他のソフト(例えばWord)のウィンドウに
ドラッグ・アンド・ドロップを行うことにより、
別に用意した画像ファイル(例えばPNG形式のファイル)を
ドロップ先のソフトに貼り付ける処理を、
HSPで実装することは可能でしょうか。

もし可能であれば、サンプル等お示し頂けますと幸いです。
よろしくお願い致します。



この記事に返信する


tsuka

リンク

2010/2/19(Fri) 16:50:13|NO.30737




いなえ

リンク

2010/2/23(Tue) 11:22:53|NO.30799

>tsukaさん
関連する情報を見つけていただきありがとうございます。
Windows APIを勉強すべきとのご指示と受け取らせていただきます。



inovia

リンク

2010/2/23(Tue) 18:30:48|NO.30806

いなえさんは
HSPを使って”他のソフトのウィンドウ”に ドラッグ&ドロップとありますので、
u さんのスクリプトですと逆になってしまいます。



u

リンク

2010/2/23(Tue) 18:45:16|NO.30807

>inoviaさん
ああ、本当ですね。
よく読んでいなくて申し訳ございませんでした。



tsuka

リンク

2010/2/23(Tue) 22:04:41|NO.30813

うむ?uさん投稿を消してしまわれたのですか?
あまり、投稿を消さないほうがいいですよ。

ここを参考にしながら、サンプルを組んでみました。
http://hspdev-wiki.net/?%BC%AB%C6%B0%A5%D5%A5%A1%A5%A4%A5%EB%A5%C9%A5%ED%A5%C3%A5%D7

メモ帳を起動させてから実行してみてください。

#uselib "kernel32.dll" #func global GlobalAlloc "GlobalAlloc" sptr, sptr #func global GlobalLock "GlobalLock" sptr #func global GlobalUnlock "GlobalUnlock" sptr #func global GlobalFree "GlobalFree" sptr #uselib "user32.dll" #func global PostMessage "PostMessageA" sptr, sptr, sptr, sptr #func global FindWindowEx "FindWindowExA" sptr, sptr, sptr, sptr #define global GPTR 0x040 //固定の0で初期化した共有メモリを割り当てる。 #define global WM_DROPFILES 0x233 //D&Dしたときに発生するメッセージ。 #define DROPFILES_SIZE 20 //DROPFILES構造体のサイズ。 //-----ここから----------- onexit *exit dialog "*", 16, "ドラッグアンドドロップするファイル。" fname = refstr //ファイルパス FindWindowEx 0, 0, "Notepad", 0 //メモ帳のハンドルを取得 hTarget = stat //ターゲットウィンドウのハンドル mx = 50 //ドロップする座標 my = 50 // 〃 //共有メモリを確保する。 //ここに格納するデータは、パスとDROPDILES構造体なので、二つ分確保。 GlobalAlloc GPTR, (strlen(fname)*4) +DROPFILES_SIZE //GlobalAllocはハンドルを返します。 hMem = stat //ハンドルだけあってもしょうがないので、メモリのポインタに変換します。 GlobalLock hMem pMem = stat //ポインタだけあってもしょうがないので、HSPの変数に割り当てます。 //DROPFILES構造体 dupptr df, pMem, DROPFILES_SIZE //ファイルのパス dupptr path, pMem +DROPFILES_SIZE, strlen(fname) df(0) = 20 //構造体の全体のサイズを指定します。構造体は大体ここにサイズを指定する必要があります。 df(1) = mx //ドロップ先のX座標を指定します。 df(2) = my //ドロップ先のY座標を指定します。 df(3) = 1 //ここが1だと、ターゲットウィンドウのクライアント座標となります。多分。 df(4) = 1 //ここが1だと、unicodeを使用します。多分。 cnvstow path, fname //ファイル名をunicodeに変換して書き込みます。 //最後に、WM_DROPFILESメッセージをターゲットにポストします。 PostMessage hTarget, WM_DROPFILES, hMem, 0 stop *exit //共有メモリの開放。 GlobalUnlock hMem GlobalFree hMem end



u

リンク

2010/2/23(Tue) 22:12:29|NO.30814

>tsukaさん
質問題材以外にも色々と間違えていまして正直恥ずかしかったので消しました^^;
普通の取得程度ならそこら中にサンプルが転がってることと思い、私情を優先させていただきました。



いなえ

リンク

2010/2/24(Wed) 11:47:09|NO.30815

uさん、tsukaさん、ご返答ありがとうございます。
サンプルスクリプトまでご提示頂き、感謝感謝です。
"Notepad"を"OpusApp"に変更することにより
ワードのハンドルを取得できることも確認致しました。

頂いたサンプルスクリプトでは、
ファイルを挿入と言うよりは開く状態になってしまう、
ドロップ先のウィンドウハンドルを自動的に取得できない、
など、まだ実装できていない部分がありますが、
解決への糸口が見つかりましたので後は自力で頑張ってみます。
どうもありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.