itagagaki/charu3-SE

ペーストが実行されない?

Closed this issue · 11 comments

ソフトウェアの引継ぎ更新ありがとうございます
SEバージョンを早速使ってみたのですが、通常モードストックモードに関わらずクリップボードへの格納は行われますが
テキストウィンドウへのペースト処理が実行されないようです。色々設定を弄ってみましたが特に変化なく…
OSはWindows 10 Proです

ペースト対象ウィンドウは何でしょうか?
たとえばメモ帳にもペーストされないでしょうか?
「キーイベント設定」で「貼り付けに使うキー」は Ctrl + V になっているでしょうか?
「特定のウィンドウでの設定」には何か設定されていますでしょうか?
クリップボードへの格納は行われるということは、その後手動で Ctrl + V をタイプしたらペーストされるのでしょうか?

返信ありがとうございます。
ペースト対象はアプリケーション問わずテキスト系全てがダメみたいです
自宅のPC(Windows 10 Home)でも同様でした。貼り付けに使うキー・特定のウィンドウ設定も特に設定なしです。
クリップボードへの格納は問題なく行われており、Ctrl+Vで貼り付けできます。
旧バージョンでは項目のダブルクリック、ストックモードでのペースト上手く行きますが、SEバージョンは最新版ベータ版どれもダメみたいです。

気になったのでVisual Studio 2019でデバッグしつつ確認しましたが、どうもアクティブなWndへのデータの受け渡しが上手く行っていないような気がします。
と言ってもクリップボードへの格納処理はどこかわかりましたが、肝心のアクティブウィンドウへのペーストはどこで行っているかわからなかったので定かではありませんが…

Enterキーでも同じでしょうか?
貼り付けに使うキーをたとえば A にして、メモ帳でCharu3 SEのデータツリーからデータ項目をダブルクリック、または選択してEnterキーをタイプすると、メモ帳には a が入力されると思います。これもそうならないようでしたら、ご推測のとおりアクティブなウィンドウにキーイベントが行っていない可能性がありますね。

ペーストを行っているのは Charu3.cpp の CCharu3App::pasteData() です。
Charu3 SEでは key.m_nMessage は常に 0 になっているはずなので 1348 行を通ると思います。
Visual Studio を使って、そこでデバッグ確認することができると思いますし、または、
%AppData%\Charu3\settings.json で "debug": true にして実行すれば 1362 行のデバッグプリントも通るようになるので、それを Visual Studio の出力ウィンドウかファイル %AppData%\Charu3\debug.log で確認することもできると思います。
ご協力いただけるでしょうか?
よろしくお願いいたします。

うーん、やはりメモ帳には何も出力されませんね。
ペースト実行の場所の説明もありがとうございます。
m_clipboard.setClipboardText(strPaste, m_ini.m_nClipboardRetryTimes, m_ini.m_nClipboardRetryInterval);
ここがクリップボードへデータを格納する場合の処理かと考えていますが、
ペースト命令がどこなのかはちょっとわからないですね
(当方C#はわかりますが、C++はあまりわからないので申し訳ないです。ソース自体はとても見やすいのですが、WinAPIとの働きかけ?的な部分をどこでやってるのか全く分からないです)

自宅環境にはVisual Studioが導入されておりませんので、取り急ぎdebug.logの当該部分出力を載せておきます。
2023/08/29-20:52:51 Charu3.cpp:2047 HOTKEY_POPUP
2023/08/29-20:52:51 Charu3.cpp:2063 getPopupPos 458 254
2023/08/29-20:52:51 Charu3.cpp:759 reviseWindowPos 1920 996 1920 1080
2023/08/29-20:52:51 Charu3.cpp:2071 reviseWindowPos 458 254
2023/08/29-20:52:51 Charu3.cpp:580 stopAppendHotKey
2023/08/29-20:52:51 Charu3.cpp:718 popupTreeWindow x=458 y=254 keep=true
2023/08/29-20:52:52 Charu3.cpp:813 closeTreeWindow 1
2023/08/29-20:52:52 Charu3.cpp:830 setFocusInfo 40812 40812
2023/08/29-20:52:52 Charu3.cpp:875 closeTreeWindow sel: clip:pasteData title:
2023/08/29-20:52:52 Charu3.cpp:953 playData active:40812 focus:407ca
2023/08/29-20:52:52 Charu3.cpp:1363 pasteData 1313288 test 0 41 active:40812 focus:407ca
2023/08/29-20:52:52 Charu3Tree.cpp:326 wrriten charu3 data "E:\Charu3_8.1\Charu3_8.1\123.c3d"

ありがとうございます。
どうやら keyEvent.default.method の初期化のコードにミスがありそうです。

%AppData%\Charu3\settings.json に下記のブロックがあると思います。
おそらく "method": 0 になっていない(1313288 になっているか、もしくは method 自体存在していない)と思われますので、”method": 0 に修正してみていただけますでしょうか。

	"keyEvent.default": {
		"copy.delay": 50,
		"copy.keyCode": 2,
		"copy.keyModifier": 67,
		"copy.message": {
			"id": 769,
			"param1": 0,
			"param2": 0
		},
		"method": 0,
		"paste.delay": 50,
		"paste.keyCode": 2,
		"paste.keyModifier": 86,
		"paste.message": {
			"id": 770,
			"param1": 0,
			"param2": 0
		}
	},

お手数をおかけしますがよろしくお願いいたします。

ありがとうございます、貼り付け処理まで辿り着いていたのにmethodを完全に見逃していました…!
ご指摘の通り、methodを0に変更することでペーストが正常に動作するようになりました!
処理的には問題がなかったようですので、後はmethodの初期値が正しく設定されれば問題ないかと存じます。
大変迅速な調査、解決方法の発見、ありがとうございました!

回避策があって良かったです。根本原因を調べて後日修正版をリリースしたいと思います。
ありがとうございました。

3.8.2 をリリースしました。
もしご協力いただけるなら、%AppData%\Charu3 を削除または退避してからの初回起動で正常な初期設定がされることを確認していただけると大変助かります。

すみません。修正をさらに加えて 3.8.3 をリリースしました。テスト不足で申し訳ありません。
検証していただけると助かります。
よろしくお願いいたします。

修正ありがとうございます!
Appdataの設定フォルダを削除してから起動し操作してみましたが、バッチリ機能しました!
methodも"method": 0,と記入されますので問題なさそうです。修正お疲れ様でした!

検証ありがとうございます。おかげさまで安心してリリースできます。