crftwr / keyhac

python based key customization utility
MIT License
158 stars 19 forks source link

vbaマクロとの競合 #9

Closed geotrader closed 8 years ago

geotrader commented 8 years ago

VBAマクロでコピー系を使うとだと思うのですが、 以下のようなログが大量に流れて動作が10倍以上遅くなります.

業務用のVBAで書式の設定されたセルを別のシートから別のシートへコピーするという内容のマクロです.

WM_DRAWCLIPBOARD nested! WM_DRAWCLIPBOARD nested! 以下ループ

途中以下の様なメッセージも混じっていたので追記します.

クリップボードの内容の不一致を検出しました. クリップボードのフックを再設定しました.

crftwr commented 8 years ago

レポートをありがとうございます。

遅いのは、もしかしたら、クリップボード履歴の最大数が大きい数字に設定されているなどの理由があるかもしれません。(全てについて重複チェックを行っているため。)

それとは別に、”WM_DRAWCLIPBOARD nested!” の警告メッセージが出ているのも、原因を調べる必要がありそうです。

業務用ということなので難しいかもしれませんが、再現できるExcelのファイルがあればありがたいです。

geotrader commented 8 years ago

返信ありがとうございます.

月曜日にクリップボードを小さくして行ってみます.

業務用なので提出することは出来ませんが,VBAは出来るので似たようなファイルを生成して貼ってみようと思います. VBAを扱える環境が自宅にないため時間がかかりますが3月9日には作って貼らせて頂きます. 少々お待ちください.

geotrader commented 8 years ago

クリップボードを小さくすると多少改善されたものの依然として大分遅いままですね.

スピードが遅くなるものに酷似したファイルです. エクセル上の単純コピーでもWM_DRAWCLIPBOARD nestedは出るみたいです. 但しなぜそれが大量になるとここまで遅くなるのかは不明です.

添付ファイルはマクロ有効ファイルです. 実行する際は,一応ソースを一読後実行下さい.

for_keyhac.zip

crftwr commented 8 years ago

再現用のファイルをありがとうございます。 確認いたします。

crftwr commented 8 years ago

対応が遅くなってしまいましたが、いただいたファイルを Excel 2013 で実行したところ、

といった実行時間の差でした。またKeyhacありで実行中、Keyhacのウインドウが応答なしになってしまっていました。ただ、10倍速度低下や、WM_DRAWCLIPBOARD nested! といったログは確認できませんでした。

crftwr commented 8 years ago

連続するクリップボードの更新イベントを、無視するか、間引く、などの対応を入れたほうがいいのかもしれません。

geotrader commented 8 years ago

ご確認ありがとうございます。

再現しませんでしたか。。

現状はkeyhac1.72のブログのコメントに匿名の方より記載があります、     keymap.clipboard_history.maxnum = 0     keymap.clipboard_history.quota = 0     keymap.clipboard_history.destroy()     keymap.clipboard_history.checkSanity = lambda : None で乗り切っておりますが、 更新イベントを無視できたりするような機能が正式に追加されると嬉しいですね。

もし対策されるご予定がありましたら再現するかどうかと、 環境のレポートぐらいでしたら協力できるかと思いますのでよろしくお願い致します。

crftwr commented 8 years ago

Ver 1.74 で、keymap.clipboard_history.enableHook(False) で、クリップボードの監視を無効化できるようにしました。

こちらの手元だと、このIssueでレポートされた問題 (WM_DRAWCLIPBOARD nested!) を再現することはできませんでしたが、Office 2013 のクリップボードヒストリ機能が有効になっている環境で、Keyhacのクリップボード履歴が更新されない、という問題は発生しました。これについては、こちら (https://github.com/crftwr/keyhac/issues/18) でトラックしていきます。

crftwr commented 8 years ago

もし、まだ再現するようでしたら、Officeのバージョンと、Officeのクリップボードヒストリ機能がOnになっているかどうかをレポートしていただけると助かります。 いったんCloseいたしますが、まだ起きるようでしたらReopenをお願いします。

geotrader commented 8 years ago

ご対応頂きありがとうございました。

crftwr commented 7 years ago

geotraderさん、 1.75でクリップボードの監視方法を変えましたので、機会があったらお試しください。 また、WM_DRAWCLIPBOARD nested! のメッセージですが、こちらでは再現できなかったと申し上げましたが、内部ログONだと表示されていたかもしれません。

geotrader commented 7 years ago

該当のWM_DRAWCLIPBOARD nested!のメッセージは発生しなくなっており、 代わりにWM_CLIPBOARDUPDATEと言うメッセージに置き換わっていました。

crftwr commented 7 years ago

そのログは開発時の消し忘れですが、内部ログをオフにして、パフォーマンスの問題が発生するかを見ていただければと思います。

geotrader commented 7 years ago

勘違いしていました。すみません。

先程上のfor_keyhac.zipファイルで試してみましたが、以下の結果になりました。

よろしくお願いします。