Vista では PBT_APMQUERYSUSPEND が使えなくなってしまったが、グループポリシーエディタで有効にすることができるようだ。
「コンピュータの構成」→「管理用テンプレート」→「システム」→「電源の管理」→「スリープの設定」→「アプリケーションでスリープに移行できないようにする」で設定できるらしい。
グループポリシーエディタは Home エディションでは使えないので、レジストリのどこに設定が保存されるのかを調査した。どうやら、以下の設定で有効にできるようだ。
REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Power\PowerSettings\B7A27025-E569-46c2-A504-2B96CAD225A1] "ACSettingIndex"=dword:00000001 "DCSettingIndex"=dword:00000001
早速 Windows 7 で試してみようとしたのだが、Power Policy Configuration and Deployment in Windows によると Windows 7 では使えなくなったようだ。
AviUtl 0.99h4 を Windows 7 で動かしたところ、エンコード中にも関わらずスリープ状態になってしまった。Vista ではそのようなことはなかったのだが。
電源関連について少し調べてみたところ、XP までは PBT_APMQUERYSUSPEND で BROADCAST_QUERY_DENY を返すと、スリープ状態への移行を阻止できたのだが、Vista 以降ではそれができなくなったらしい。しかし、AviUtl の Vista と Win7 での挙動の違いについては不明。
Powercfg コマンドを使えば、電源関係の設定をいろいろ変更できるようだが、PBT_APMQUERYSUSPEND に関する設定は見当たらなかった。
Windows Virtual PC をインストールしてみた。Home エディションなので XP Mode は使えない。代わりに Virtual PC 2007 で構築してあった Win2k 環境を動かしてみた。統合機能をインストールしようとした段階でエラーが出てしまった。ゲスト OS として Win2k はサポートされなくなったようだ。一応 Virtual PC 2007 の統合機能により、マウスはシームレスに動いているが、クリップボードの共有はできていないようだ。Win2k では Windows Virtual PC の新機能である USB も使えない。Virtual PC のメインの管理画面が無くなって、使い勝手が悪くなった気がする。Windows Virtual PC は、XP Mode に特化した仮想環境と考えた方が良さそうだ。
工人舎 SC に入れた Windows 7 をカスタマイズ中。Win7 の新しいタスクバーを活用するには Aero を有効にする必要があるが、デフォルトの設定では重い。各種アニメーションを OFF にしたところだいぶ軽くなり、Aero ON でも問題なく使用できそうである。
Win7 になって、タスクバーがずいぶん太くなってしまったが、画面の狭い SC ではかなり邪魔である。タスクバーのアイコンを小さいアイコンにしたところ、Vista と同じ太さになった。
工人舎 SC の Windows 7 用ドライバが配布されていることを知った。一応現状でも問題なく動作しているようだが、念のためドライバとアプリを入れ替えておいた。ワンセグも正常に動作することを確認した。
自動更新後の再起動を抑制する方法は、Windows 7 でも引き続き有効なようだ。しかし、作業中のファイルが開かれていようとも、勝手に再起動してしまう凶悪な動作をデフォルトとしておくのはいかがなものか。
Core i7 のデスクトップマシンにもインストールしてみた。工人舎 SC に比べるとずいぶん短い時間でインストールができた。
HDMI 出力した画面が小さく表示される問題が再発。Catalyst Control Center での設定箇所がなかなか見つからず苦労した。「ASK - ATI RADEONシリーズでHDMI接続時に黒枠が表示される」に設定手順が記載されていた。
nvplayer 0.6.15 で MP4 ファイル(音声は AAC)の音が出ないという問題が発生。音声デコーダには Microsoft DTV-DVD Audio Decoder が使われている。DirectShow Filter Tools で Microsoft DTV-DVD Audio Decoder のメリット値を変更してみようとしたが変更できない。そもそも、ffdshow の方がメリット値が高いのにそれが使われていない理由が分からない。そこで、レジストリを調べてみたところ、HKLM\Software\Wow6432Note\Microsoft\DirectShow\Preferred という怪しいキーが見つかった。試しに変更しようとしてみたが、アクセス権がないようだ。
ググってみると、「Windows 7 で ffdshow などの動画のデコーダを選択できる "Win7DSFilterTweaker" - 超: ヤること成すこと日記帳。」という情報があった。そのページのリンク先にあった Win7DSFilterTweaker 1.3 では AAC のデコーダを変更できなかったが、Codec Guide: Windows 7 Preferred DirectShow Filter Tweak Tool にあった Win7DSFilterTweaker 1.9 で AAC デコーダを変更できた。
もしかして Win7 だと mpg123dsf もそのままでは使えなくなってしまうのか?
工人舎 SC (SC3) に Windows 7 Home Premium をインストールしてみた。SC3 には DVD ドライブがないので、ネットワーク経由でインストールすることにした。インストールを開始しようとしたところ、Windows 7 Upgrade Advisor で互換性を確認するように促された。いくつかのドライバやワンセグアプリのアップデートが必要なようだ。
インストールには、3時間程度掛かった。Win7 を入れる上で一番気になっていたのが、自分が作ったり改造したソフト(特にシステム系やシェル拡張系)が動くかどうかだが、TClock Light 改造版、mp3infp Unicode 版はいずれも問題なく動いているようだ。ijexp32 はインストール先が悪いためかアップグレード時に削除されてしまったが、再度インストールしたところ問題なく動作した。
ATOK 2006 は Windows 7 には正式対応していないが、一応動作している。ワンセグは動作未確認。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce に登録したプログラムは、UAC が有効な場合でも実行がブロックされることはないようだ。
ようやくコンパイルエラーがなくなった。恐る恐る起動してみたところ、一応 MP3 ファイルのタグは表示された。一発で動いてほっとした。VQF を表示しようとしたら落ちてしまったが、NULL ポインタアクセスをしている部分が見つかり修正した。ファイルを保存する際に内容を破壊するようなバグがないか心配だが、とりあえず公開して反応を見てみるか。
コンパイルエラーが 1000ヶ所以上。
mp3infp のビルド環境を整えることにした。x64 の MFC が使える環境は、手元に WDK しかないので、WDK で環境を構築した。
x86 版については WDK 6001.18002 の Win2k 用環境でビルドすることにしたが、かなり手間取った。リンク時に AfxThrowInvalidArgException が見つからないと言われてしまったが、とりあえずダミーの関数を用意することで回避した。できあがった実行ファイルを Win2k で動かそうとしたところ、msvcrt.dll に _fstati64, _fseeki64 が見つからないと言われてしまった。_fseeki64 はコンパイルオプションを変更することで使わなくなり、_fstati64 は代わりの関数を用意することでようやく Win2k で動作するようになった。
Win2k 用の環境でビルドしても、Win2k では動かない場合があるというのはやっかいだ。
これでようやく mp3infp の Unicode 版を作成するための準備が整った。
通常、x64 アプリから、x86 DLL をロードすることはできないが、リソース DLL は別らしい。DLL を作成する際に、リンカオプションとして /NOENTRY を指定すると、実行コードを一切含まないリソース専用の DLL となる。試してみたところ、確かに x86 DLL がロードできた。
何度かのやりとりの末、mp3infp が Vista x64 で使えるようになった。mp3infp のビルド環境が準備できていないため、ずいぶん時間が掛かってしまった。現在手元にある x64 MFC 対応の ビルド環境は WDK のみなのだが、WDK でビルドするには VC++ のプロジェクトファイルの代わりに sources ファイルを作成しないといけないため、面倒でやっていない。
mp3infp の本家の最新版である 2.55 beta1 は、ソースコードが失われたという話だし、2.54f5 で x64 も安心して使えるようになったことなので、2.54f5 をベースに Unicode 化を検討するか。以前から mp3infp の Unicode 版がほしいと思っていたが、ちょうどいい機会なので、自分がやってみるか。
実物を早く見てみたい。通常構成ならば、VersaPro VS の方が少し軽いのか。
Vista のコントロールパネルで mp3infp の項目を開くと、終了時にプログラム互換性アシスタントが表示されるという問題がある。いろいろ試したところ、対策が判明した。リソースの RT_MANIFEST の下に、123 という項目を作成し、asInvoker を記載したマニフェストファイルを配置すればよい。
MS 公式のドキュメントでこのことに関する内容を探したが、見当たらない。
Windows 7, Vista や x64 関連のプログラミング情報。
先月の spam メールの集計結果。着信拒否にならなかった spam が少なくとも 1688通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 1通(0.06%)、誤削除が 3通。誤削除は復活できたので実害はなかった。