Windows Vista に適用時の個人的まとめ。 ○ちなみに私の環境 Windows Vista Ultimate SP1 32bit (VAIO Z90) Vista での gdi++ 適用手段は主に以下の3通り。 基本的に UAC は有効とした場合を考えている。 (A) gditray.exe をログイン後に起動する 操作: ・gditray.exe へのショートカットをスタートアップに登録 ・手動で gditray.exe を起動 利点: ・レジストリ汚さない ・有効無効を動的に変えるなどタスクトレイのアイコンから調整できる 欠点: ・管理者権限のないウィンドウには適用されない。UAC の確認がよく出る ・UAC を切ると適用できるウィンドウが増えるが UAC を切るとなんだか不安? (B) レジストリで Shell を変更し explorer.exe を gdi++.exe の引数として呼び出す 操作: (1) 管理者権限で gdi++.exe, gdi++.ini, gdi++.dll, freetype.dll, detoured.dll を   system32 などの管理者権限のディレクトリにコピー (2) レジストリエディタで   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon   の Shell の項目を   exploror.exe   から   GDI__~1.exe explorer.exe   に変更。   ファイル名は8.3文字のファイル名で指定しないといけない。”が入っていてもダメ。   dir /X で8.3文字のファイル名は分かる。 利点: ・explorer.exe が起動するウィンドウ全てに自動的にアンチエイリアスがかかる 欠点: ・レジストリをいじる ・explorer.exe が起動しないウィンドウ(タスクマネージャなど)には適用されない ・gditray.exe を使わないので、gdi++ の on/off が簡単にできない 設定: ・HookChildProcess=1としないと、一般的なウィンドウにはアンチエイリアスは効かない (C) レジストリで AppInit_DLLs を変更し全てのアプリで gdi++.dll をロードさせる 操作: (1) 管理者権限で gdi++.ini, gdi++.dll, freetype.dll, detoured.dll を   system32 などの管理者権限のディレクトリにコピー (2) レジストリエディタで   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows の   LoadAppInit_DLLs の項目を 1 に変更し、   AppInit_DLLs の項目に C:\Windows\System32\GDI__~1.DLL を追加する   ここでもファイル名は8.3文字のファイル名で指定しないといけない。 利点: ・もっとも多くのウィンドウにアンチエイリアスが適用される 欠点: ・レジストリをいじる ・gditray.exe を使わないので、gdi++ の on/off が簡単にできない ・LoadAppInit_DLLs はセキュリティ上 Vista ではデフォルトで 0 に設定されているが  1 に設定する必要がある 設定: ・(B) とは逆に HookChildProcess=0としないと、ログイン画面が出てこない (B)(C) は失敗した場合、セーフモードで立ち上げてレジストリを元に戻してください。 ●(A)-(C) それぞれのインプレッション ・自分流のチューニングのしやすさ (A) の場合は、ini ファイルを書き換えて、タスクトレイのメニューで既存の ウィンドウ全てに設定を反映でき、それで確認して設定を詰める。 (B), (C) はシステムディレクトリにコピーした gdi++.ini を管理者権限でエディタで 開いて設定を変更する。今までに開いたウィンドウには適用されないが、次に開いた ウィンドウから適用されるので、新たにウィンドウを作成して確認し、設定を詰める。 手間はどっちもどっちといったところ。 ・適用されるウィンドウ数 (C) > (B) > (A) という感じ。UAC を切ると (C) > (B) >= (A) という感じ。 ・セキュリティについて (B)(C) はシステムディレクトリにファイルをコピーする(しない場合は UAC により 適用できるウィンドウ数が減る)こと、また、(C) の LoadAppInit_DLLs を 1 に 設定することで、セキュリティに不安がある。 ちなみに Kaspersky も LoadAppInit_DLLs を 1 に書き換えるので、禁じ手という訳 ではなさそう。 Freetype 版 gdi++ についてはソースが公開されてはいるが、DLLインジェクションなどの リスクについては自己責任で。 ●Helium バージョンについて gdi0870 (Helium 20080808), gdi0859 は上記の (A)-(C) どれでもしばらくするとフリーズした。 gdi++.exe, gditray.exe に WINXPSP2 や RUNASADMIN、 ELEVATECREATEPROCESS を付けたりしてもダメであった。 フリーズが起こる状況は、システムの詳細設定で「環境変数」を変更しようとしたり、 Thunderbirdでフォルダ名を変えようとしたり、他のウィンドウでも名前の変更をしようと した時。特に環境変数の変更では100%フリーズが起きた。 フリーズの症状は、マウスだけ動くが一切操作を受け付けなくなる。 Ctrl-Alt-Delでログオフ可能な画面に切り替えることができるが、それ以降も全く操作を 受け付けなくなる。一時的ではなく、3時間ほど待ってみたが変化はなかった。 Vista で Helium の不具合のない動作例は少ないが、 ちなみに、友人の PC (Windows Vista Business SP1 32bit, VAIO TZ91) では gdi0859 + gditray で問題なく動作しているらしい。あくまで参考に。 上記の設定で少しでも不具合が出たら Helium はあきらめるのがおすすめ。 ●Freetype バージョンについて gdi0850 (Freetype 20080317) だと今のところ安定稼働中。 私は (C) の方法で稼働中。 Freetype 版を使う注意として、CacheMax* パラメータを必ず設定すること。 そうしないと CPU 負荷が 30% 程度 (P9500上) になる。設定すると 5% 以下。 ●雑感 Helium 版と Freetype 版は ini ファイルの設定項目が違うので注意。 好みが分かれるが Helium 版の方がレンダリングは濃くてきれいな印象。 Freetype 版も設定次第で Helium 版に負けない感じになる。 以下、Freetype での私の設定。 ---- [General] ; 子プロセスにも自動でgdi++を適用 ; [0:Disable] 1:Enable HookChildProcesses=0 [FreeType] ; ヒンティングの設定。 ; 0だとバイトコードインタプリタを使用します(フォントに含まれるヒンティングそのもの)。 ; 1だとヒンティングをしません。 ; 2はFreeTypeのオートヒンティングを使用します。 ; ※FreeTypeライブラリのバイトコードインタプリタがOFFになっている場合は0と2 ; が同等になります。 ; ※一部のフォントではバイトコードインタプリタによるヒンティングを行わないと ; 字形が崩れます(例:DF平成ゴシック)。 HintingMode=2 ; -1でアンチエイリアスを無効化。 ; 0なら普通のアンチエイリアス(256階調)をかけます。 ; 1はLightモードです。FreeTypeのReferenceによるとMac OS Xっぽい描画に ; なるらしい。 ; 2、3は液晶用。並びが違います。 ; ※1を指定したときはHintingModeは2(オートヒンティング)にしてください。 ; Lightモード(1)はノーマルモード(0)と比べて字形の変化が少なくなります。 AntiAliasMode=1 ; 強制的にそのフォントを使うようになる ; ダイアログが見づらくなるが一時的に特定のフォントで確認したい時に使用する ;ForceChangeFont= ; 文字の締まりを良くするようなもの。 ; -1を指定すると無効化できる。(注: 0でも有効になっている) ; 0-12までの値を指定できます。 ; TextTuningはAntiAliasModeが0か1の時に使用します。 ; TextTuningR・TextTuningG・TextTuningBはAntiAliasModeが2か3の時に使用します。 ; ※文字と背景の境界を調節し、背景側を文字側に侵食させる(背景を強く出す)よう ; な形になっています。より大きな値を指定すると文字がより締まってみえますが ; アンチエイリアスの効果も落ちるので注意してください。 TextTuning=0 TextTuningR=-1 TextTuningG=-1 TextTuningB=-1 ; 標準のウェイトを相対値で指定(-32〜+32)。BoldWeightより変化幅が小さい。 NormalWeight=4 ; 太字のウェイトを相対値で指定(-16〜+16)。マイナスにすると細くなる。 BoldWeight=2 ; 斜体の傾斜を相対値で指定(-16〜+16)。 ItalicSlant=0 ; 0だと文字詰めなし ; 1だと文字詰めあり ; ※ONにするとIEとかでずれるので注意 EnableKerning=0 ; FreeTypeで処理させる最大のフォントサイズ。(ピクセル単位) ; 0で全てのサイズ。初期値は0。 MaxHeight=72 ; <オプション解説(マニア向け)> ; フォントを読み込むのをCreateFont系から要求時(TextOut系など)にする。 ; FAQにあるManager使用時の問題が解決されるかもしれない。 ; ※ハングアップする可能性があるので低スペックマシンでは絶対にONにしない事。 LoadOnDemand=0 ; フォント読み取りにMemory Mappingを使う。 UseMapping=0 ; Managerが使用可能になる。(標準では使用できない) UseManager=0 ; 0の場合(もしくは未定義の場合)は[ExcludeModule]が有効。(従来と同じ) ; 1の場合[IncludeModule]が有効。 ; Managerによる自動適用は使いたいが、実際に適用するのは特定のアプリに限定 ; したいという場合に1を指定してIncludeModuleの方を使う。 UseInclude=0 ; FT_Library_SetLcdFilterに渡すパラメータ。 ; 0:None、1:Default、2:Light、16:Legacy ; LegacyにするとLibXftと同じアルゴリズムらしい。 ; ※2.3.0以降で使用する事。 LcdFilter=1 ; 影をつける。 ; 書式: Shadow=x,y,t (x>0, y>0, t>0, パラメータ省略は不可) ; オフセット(x,y)に100/t (%)の透過率で描画 ;#Shadow=1,1,4 ; FTC_Manager_Newに渡すパラメータ。詳細はFreeTypeのマニュアル参照 ; ※パラメータチェックしてないので大きな値を設定すると暴走する可能性あり CacheMaxFaces=16 CacheMaxSizes=32 CacheMaxBytes=10485760 [Individual] ; フォント別に個別設定する。 ; 書式: フォント=Hinting,AAMode,NormalWeight,BoldWeight,ItalicSlant,Kerning ; 例のように省略可能。その場合は[FreeType]で設定した共通設定が使われる。 ;メイリオ=0,,0,0 ;MS Pゴシック=,0,, ;Arial=,,,,,1 ;MingLiU=0 ;PMingLiU=0 ;DF行書体=0 ;DF特太ゴシック体=0 ;DF平成ゴシック=0 ;DF平成ゴシック体W5=0 ;DF平成明朝体W3=0 ;DF平成明朝体W7=0 ;DHP行書体=0 ;DHP特太ゴシック体=0 ;DHP平成ゴシックW5=0 ;DHP平成明朝体W3=0 ;DHP平成明朝体W7=0 ヒラギノ角ゴ Pro W3=,,12,10 ヒラギノ角ゴ Pro W6=,,12,10 ヒラギノ丸ゴ Pro W4=,,12,10 ヒラギノ明朝 Pro W3=,,12,10 ヒラギノ明朝 Pro W6=,,12,10 MeiryoKe_Gothic=0,,, MeiryoKe_PGothic=0,,, MeiryoKe_UIGothic=0,,, MeiryoKe_Console=0,,, MeiryoT12ptmod=0,,10,6 Meiryo mod 12pt AA=0,,, Courier New=,,16,10 MS 明朝=,,16,10 MS P明朝=,,16,10 [Exclude] ; 除外フォント。本家と違って上限は無し。 Marlett ;Tahoma Verdana [ExcludeModule] ; 除外モジュールリスト。本家と違って上限は無し。 ;fontview.exe ;sidebar.exe ;imejpmgr.exe ;msdev.exe ;devenv.exe gditray.exe ;tclock.exe ;afx.exe [IncludeModule] ; 対象モジュールリスト。ExcludeModuleの逆で適用したいモジュールを定義する。