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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0323
kmクリップボードを使ったアプリケーションへのデータ送信7解決


km

リンク

2010/3/23(Tue) 20:01:23|NO.31503

現在、ライティングツールを作成しているのですが、
クリップボードによるデータのやり取りができなくて困っています。

テキストデータ、画像データではないので、該当するようなモジュールは
見つけられませんでした。
APIのSetClipboardDataあたりも試してみましたが、
理解ができませんでしたm(-_-)m データ形式すらわかりません・・・

クリップボードの共有メモリ内のバイナリを変更する等の方法でもいいので、
何か手段があれば教えてください。

送信する対象は、ASCII(C)のRPGツクール2000のイベントエディタ欄です。
バージョンはHSP3.1、dllやプラグインはいくら使ってもかまいません。
ソースは4k超えているので見せられません^^;
参考までに、"TkoolBridge"というエディットツールがありますが、
こちらはクリップボードでデータのやりとりをしています。



この記事に返信する


inovia

リンク

2010/3/23(Tue) 21:55:00|NO.31506

以前調べたのですが、RPGツクール200x の イベント内容の
クリップボードデータ形式は 566 です。

昔読み書きするモジュールを作ったはずなのですが、
どこかに紛失したらしいので書き直し中。



km

リンク

2010/3/23(Tue) 21:58:43|NO.31507

それはかなり有力な手がかりですね。
ただ、クリップボードデータをうまく扱えない時点で壁に当たるのですが……

読み書きモジュール……
あれば滅茶苦茶助かります。



inovia

リンク

2010/3/23(Tue) 23:01:41|NO.31508

とりあえず完成。
RPGツクール200xのイベント内容のクリップボード取得・書きこみモジュールです。

(上:メイン,下:ミラー)
http://www.tkooler.net/rpg2kcb.as
http://homepage2.nifty.com/MJHS/dotou_hsp/module/rpg2kcb.as

・命令
getcbbin p1 【クリップボードからバイナリデータを取得します】

p1 = 代入変数

戻り値(stat)

0 以上 : 正常終了でバッファサイズとなっています。
-1 : クリップボードを開けない
-2 : クリップボードの中身がない
-3 : ツクール形式のクリップボードではない
-4 : データが取れない
-5 : グローバルメモリの確保に失敗
-6 : グローバルメモリのロック
-7 : グローバルメモリのコピーに失敗

setcbbin p1,p2 【クリップボードにデータを書き込みます】

p1 = 代入変数
p2 = バッファのサイズ

戻り値(stat)

0 : 正常終了
-1 : サイズ異常
-2 : グローバルメモリの確保に失敗
-3 : グローバルメモリのロック
-4 : クリップボードを開けない
-5 : クリップボードの所有権取得に失敗
-6 : クリップボードのコピーに失敗

--------------------------------------------------------------------

手順としては

イベントエディタのところで Ctrl+C を投げる。
(バイナリデータのため、「sendmsg ハンドル,WM_COPY」 は失敗します。)
クリップボードにバイナリデータが入っていると思うので、 getcbbinで取得。
といった流れです。



km

リンク

2010/3/23(Tue) 23:36:28|NO.31510

うおお!
取得/書き込みできました!神きた!かつる!これでかつる!


こちらの都合のせいか、CountClipboardFormats,EnumClipboardFormats,GlobalFreeを
ラップして#uselib "use32.dll"を実行の後動きました。

バイナリは扱えるので後はどうにかなると思います。


ツールが完成したら、readmeにアドレスとお名前を
添付させてもらってもよろしいでしょうか?



inovia

リンク

2010/3/24(Wed) 00:00:14|NO.31511

一応サンプルコードを投下。

#include "rpg2kcb.as" title "文章の表示を ツクール形式のバイナリクリップボードデータに変換" buf="【勇者】\n書きこみテスト" mesbox buf,320,100,1 button "変換",*cnv stop *cnv notesel buf if notemax>4:dialog "行数が多いです。":stop sdim bin,1024 // バイナリデータを入れておく p=7 // 書きこみ位置(スタート位置) wpoke bin,4,0x7ECE // 文字列の表示を表す repeat notemax // 1行取得 noteget tmp,cnt // 1行のサイズを書きこみ poke bin,p,strlen(tmp):p++ // 文字列コピー memcpy bin,tmp,strlen(tmp),p,0 p+=strlen(tmp) // NULL 書きこみ(オフセットを1ずらすだけー) p++ // 複数行の場合の処理(および最終行は処理しない) if (notemax>1)&(notemax-1!=cnt){ lpoke bin,p,0x000E9D81:p+=4 // 独自改行コード } loop // 仕上げに データサイズ書きこみ lpoke bin,0,p-4 ;(-4 したサイズです) setcbbin bin,p if stat=0{ bsave "temp4.bin",bin,p s="ツクール形式に変換しました。\n" s+="イベントエディタを開いて貼り付けしてみてください。" dialog s }else{ dialog "失敗" } stop



inovia

リンク

2010/3/24(Wed) 00:01:13|NO.31512

> ツールが完成したら、readmeにアドレスとお名前を
> 添付させてもらってもよろしいでしょうか?

構いません。というか大歓迎(笑)



km

リンク

2010/3/24(Wed) 00:18:33|NO.31514

> 構いません。というか大歓迎(笑)
どうもw

非常にジャストミートというか、
期待のさらに上を行く回答ありがとうございました。m(_ _)m



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