編集エリアに文字が書き込まれるNo.09445
K'zawa さん 17/05/10 14:28
 
こんにちは、K'zawaです。

下記のマクロは、編集エリアに文字を書き込むような処理はないですが、
読み上げ中にキーを連打すると書き込んでしまいます。
(PC Talkerが入っている環境でないと動作しませんが、他に再現するものが
みつかりませんでした)

秀丸エディタ Version 8.71 32bit edition
Windows 10 Home, 64bit Version 1607   ビルド 14393
PCTalker 10 Version 1.17


$s = "あいうえおかきくけこ";
#voice = createobject( "VbPCTK.Voice" );
disablebreak;
while ( 1 ) {
 if ( iskeydown( 0x1B ) ) {  // ESCキー
  break;
 } else if ( iskeydown( 0x31 ) ) {  // フルキー 1
  callmethod #voice, "Go", $s, 0;  // 読み上げる
  callmethod #voice, "BusyWait";  // 読み終わりを待つ
 }
 sleep 100;
}
releaseobject #voice;

[ ]
RE:09445 編集エリアに文字が書き込まれるNo.09446
秀丸担当 さん 17/05/10 16:41
 

同じ環境で試せていないのではっきりとしたことはわからないですが、マクロが
終わった後に入力されるのか、マクロ実行中に入力されるのかによって原因が違
うと思います。
例えば sleep 1000; とだけしたマクロを実行し、実行中にキーを押すと、マク
ロが終わった後に、一気に入力されます。
試しに、マクロの最初と最後にreadonlyswitch;を入れておくと、中で起こって
いることか、外で起こっていることかの判別ができると思います。
外だとしたら、そういう動作で合っているかもしれません。中だとしたら、なぜ
だかはわからないです。詳しく調べる必要があると思います。

[ ]
RE:09446 編集エリアに文字が書き込まれるNo.09447
K'zawa さん 17/05/10 20:00
 
秀丸担当さん、こんにちは。
K'zawaです。

readonlyswitchを使って細かく切り替えてみたところ、
書き込まれるのは、BusyWaitメソッドの動作中だけでした。
なのでその間書き込み禁止にすることで回避可能です。

[ ]
RE:09447 編集エリアに文字が書き込まれるNo.09449
秀丸担当 さん 17/05/11 11:33
 

調べていただいてありがとうございます。
マクロ終了後ではなく、COMのメソッドの中でのことのようです。
メソッドの呼び出し内ではdllfuncと同様、何でもありなので、その動作自体を
どうにかすることはできないです。
呼び出し中は自動的にreadonlyswitch相当と同等にすることは技術的には可能で
ありますが、もしかしたらそれは期待通りではないdllfuncの使われ方もあるか
もしれないです。
readonlyswitchで回避可能ということで、すみませんがそれで回避をお願いした
いところです。

[ ]
RE:09449 編集エリアに文字が書き込まれるNo.09451
K'zawa さん 17/05/11 14:19
 
秀丸担当さん、こんにちは。
K'zawaです。

>readonlyswitchで回避可能ということで、すみませんがそれで回避をお願いした
>いところです。

了解しました。

[ ]