便利な自作ソフト

 なかなか世の中にあるソフトというのは100%満足することはなかなかありません。それぞれのかたによって便利も不便も違うと思いますので当然ですが、そこでソフトを自作するとそれが満たされることがあります。欲しい機能が実現できなくても、精一杯やったと言う思いは残るので、ただ単に誰かに「それはできません」と言われるよりも精神的にすっきりします。以下、ソフトの開発者向けで高度です。

コピー & 貼り付けの不具合

 ある用途で、ブラウザに入力して検索した内容を保存する必要が生まれました。ブラウザ画面のうち、ほんの10文字程度なのですが、これをコピー(Ctrl+C)、ペースト(Ctrl+V) で自作ソフトに移すのですが、数十回やるので指が痛くなります。それで、不具合が起こるまでの回数はまちまちなのですが、どうも数十回繰り返すと Windows2000 が異様に遅くなります。どのくらい遅くなるかと言うと、軽快なソフトを終了させると通常は一瞬でそのソフトのウインドウが消え去ります。ところが、不具合が起こると、これが5秒はかかります。ソフトによっては数十秒かかります。漢字入力のIMEは確定のEnterを押してから10秒程度制御が戻ってきません。画面の書き換わりも遅くなります。ソフトを切り替えると5秒から10秒またされるでしょうか。

CPUは占有していない?

 タスクマネージャーで CPU の占有率を見ると数% です。タスクマネージャ自体を表示させるのも処理が遅いので難儀です。ドライバとソフトごとに表示するようにしても双方とも占有率は低いです。

自作ソフトのせいか?

 遅いのを我慢して無理やり使っているとそのうちに「クリップボードが開けません」というメッセージが出ます。ということは、自作ソフトのほうが悪いのだろうなあ。開発言語は。。。。VB6 SP5です。
 さてさて、何のせいだろう。この自作ソフトの中ではいくつものファイルを読み書きします。ファイルを開いたときのファイルハンドルを閉じないで、どんどん新しい番号を取っていったら、そのうちたぶん駄目になりそうだなと、そこのチェックをしましたが問題なし。テキストボックスを操作するのが悪いのかと処理を変えてみたが、よくならず。

遅くなった後は、お決まりの。。。

 この異様に遅くなる不具合が起こると、OS の再起動しかありません。この時、必ず、「DDE Server Window」が終了しないとダイアログが出ますのでたぶんこれが犯人でしょうね。これだけ強制終了させれば復帰するのかな? タスクマネージャーではできないようで、何かツールが必要みたいですね。

OLE Drag&Dropをつかう

 マイクロソフトのサイトで色々と情報を漁ると、いつもなかなか欲しい情報がないのだが、DDE で検索したら32個ありました。そのなかに OLE を使うように書いてあるものがありました。クリップボードは Windows3.0 の頃にはあったから、クリップボードはやり取りに DDE を使っているんでしょう。(たぶん) それで、最近は OLE だから、そちらの方式にしてみました。仕方がないので OLE を使うように変更しました。これでどう出るか。。。

不具合は依然発生

 結局、クリップボードをやめて OLE Drag & Drop にしたが全然効果がなく、不具合は消えませんでした。確かに以前よりは不具合になる頻度は低くなっている気がしますが。。。いったい何が原因だろう。インターネットエクスプローラーのせいなのかなあ。それだったら他のソフト経由で自作ソフトにペーストしてみれば分かるか。。。

強制終了ツールを作る

 前のNTのリソースキットに強制終了ツールのKILLというのがあるらしい。でも、入手方法がわからず、このツールだと終了させたいプロセスのプロセスIDを入力するらしい。となると、どこからプロセスIDを調べてくるか。。。どのファイルが原因かも分かっていないし。。。
 それで、作ったソフトはウインドウのタイトル(タイトルバーの表示)を検索して、そのウインドウのプロセスを調べて、そのプロセスIDを取得して、プロセスを強制終了させると言うソフトです。
 通常見つかるこの手のソフトはタスクマネージャもそうですが、プロセスをすべて列挙しています。どうも、異様に遅い不具合が起こっているときは、これすら何十秒もかかるので、自作ソフトは相当便利です。

少々改善するがまだ駄目だ

 不具合が起こったら、自作ツールを起動します。そうすると以前の設定を覚えているのでサーチボタンを押します。サーチする文字は"DDE Server"です。これを含むタイトルをもつウインドウがサーチされます。そうすると幾つか見つかる場合があります。わたしの例ですと、Explorer.EXE , iexplore.exe , VB6 などがこのウインドウを作っているようです。DDE を使うときにマイクロソフトでは"DDE server Window" というウインドウを作ることにしているのかな。。。

いよいよ強制終了

 それで、TerminateProcess を使って終了させると強制終了はできるらしい。それで、VB6 は今回はあってもなくても関係ないようだ。まず、インターネットエクスプローラーが原因かと思うので、iexplore.exe を終了させてみる。すると今まではウインドウの移動も何秒かかかっていたのが一瞬で移動するようになる。表面上、これで不具合が解消したように見える。

まだ駄目か

 ところが、これでもだめで、IMEが遅かったり、新規のソフトがウインドウを表示するのに時間が10秒以上かかったりと駄目である。それで、Explorer.EXE も終了させてみる。当然ながら、終了させてもシェルプログラムなのでまた立ち上がってきます。おまけにタスクバーの表示は完全には戻りません。

それでも駄目

 これでも駄目なようです。この時点で遅いのは、IMEの確定、検索などに出てくるような子ウインドウの出現、消滅、そしてソフトの起動です。ソフトの起動くらいだったら、一時的なのでその間だけ我慢すればいいのですが、IMEの変換が遅いのは文章入力で困ります。英文字だけだったら不具合無く入力できます。マウスのホイールの動作も相当タイムラグがあります。なにかこういう OLE 関連がうまく動いていないのでしょうね。これは、IMEの確定後などに一瞬で処理されるからです。常に遅いのではなくて、何かの処理のときに遅くなっている部分があると考えられます。
| このページのTOPへ移動 |