WindowsAPIの互換
HideExpでWin8.1でスクリーンセーバから復帰すると動かないという報告があった。
調べていくとどうも
Win8.1ではスクリーンセーバから復帰してもスクリーンセーバが動作中に見える
ことが原因っぽい。
このAPIだが
OpenDesktop( 'Screen-saver',
で見るとあるが、これがどうもうまく動かない。(起動時はちゃんと動く。)
非推奨の
SystemParametersInfo(SPI_GETSCREENSAVERRUNNING,
だとうまく返ったりする。
このあたり
FindWindow('WindowsScreenSaverClass',
とかいろいろあるがどうも非互換で見捨てたのかもしれない。
これは以前指摘があって対応したのだが、スクリーンセーバ動作中に動作するのを禁止している。
つまりエクスプローラがスクリーンセーバー動作中も出現する。勿論、マウスを動かせばスクリーンセーバが解除される。
ただ、今はそうはならす、スクリーンセーバが動作しても出現はしないようだ。
このあたりの動作も変わってきたのだが、これは正常になったような気がする。
なので思い切って外してしまった。
やっとできたと思っていろいろやっていると、今度は「インターフェイスがサポートされていません」のエラーが出る場合がある。
これは結構不可解で、Windows7でコンパイルしてXPで実行すると、出現する場合がある。
しかしXPだから必ず出るというものではなく、出るものと出ないものがある。
いろいろ調べてみたがどうもわからない。
そこでソースをいろいろやっていると、shell32(ActiveX)を組み込むとそうなるみたいだ。
これはエクスプローラが落ちた場合にその時開いていたフォルダを再現しようとして入れたものであるが、それが結果としては良くなかったようである。
ただXPでコンパイルするとXPでは出ないし、Windows7でも動いてしまう。なので対応方法としてXPでコンパイルするというのもある。
結果的にはやはり不安定そうなのでshell32の使用はやめてしまった。
そうするとXPでもWindows7でもまともに動く。
ここに来てトリッキーな部分がどんどん動かなくなってきていて、「素直なもの」だけになっている。
やはりWindowsも世代が進むと、細かいレベルで非互換があって、トリッキーなものは動かなくなってくるのだろう。
ちょっと悲しい...。