|
ご回答いただいた皆さん、ありがとうございました。
原因がわかりました。はじめに、この解決方法を書きます。
直接の原因は、TweakUIというカスタマイズ ツールにより、
[アプリケーションにフォーカスを横取りさせない]という項目を
有効にしていたことです。
マクロに汎用性を持たせるため、以下のようなコードをマクロの先頭に追加しました。
// ここから
openreg "CURRENTUSER", "Control Panel\\Desktop";
#LOCK = getregnum( "ForegroundLockTimeout" );
closereg;
if ( #LOCK != 0 ) {
message "このシステムは、ウィンドウのアクティブ化を抑止する設定になって
います。\n" +
"setactivehidemaruなどの秀丸管理マクロが正常に動作しないケースが
あるため、\n" +
"マクロを終了します。";
endmacro;
}
// ここまで
TAKAさんには、実際に試験を行っていただいたようですね。
また、詳細な試験環境を書いていただき、大変参考になりました。
特に、WindowsMEでは正常、とあったため、原因に気が付きました。
(WindowsMEは、(リリース時期から)Windows2000とほぼ同一のシステム環境を持っている
と考えられたためです。)
秀丸には多くの設定項目があり、その設定によって他のシステムでは再現しないかも
しれない、
とは考えていました。しかし、システム側の設定に問題があるとは、気付きませんで
した。
TAKAさんからのコメントをきっかけに「何かシステムの設定を変えたかな?」と
考えられるようになりました。
> 解決になってなくて、すみません。
と言われていますが、とんでもありません。
解決の糸口をお教えいただいたため、感謝しています。
TAKAさんのコメントにもありましたが、杉浦 まさきさんからのコメントをきっかけに
ウィンドウハンドルでの制御方法をその利点を知りました。
> hidemaruhandle() でウィンドウハンドルを取得して、
> 以降はそれを setactivehidemaru に渡した方が
> 早い&動作も若干?安定すると思います。
解決するまでの間、暫定的にrunsyncを使用していたのですが、
(秀丸とは無関係の)別のプロセスがシステムに過負荷をかけたとき、
同時に実行していたマクロ中のfindhidemaruがエラーになってしまいました。
しかし、ウィンドウハンドルでsetactivehidemaruすると、
エラーになるケースはありませんでした。
皆さんにお教えいただいた知識から、個々のシステム環境に依存せず、
より安定した動作を行う良いマクロを作ることができそうです。
本当にありがとうございました。
|
|