Hanbit LauncherがWindows 2000で動作しない不具合解決
一昨日のアップデートでハンビットステーション にある一連のゲームが動作しなくなったという依頼が掲示板に上がっていたのでテストしてみました。
なお、影響を受けるゲームは以下の通り
ともに戦い成長するオンラインRPG『エイカ オンライン』
『グラナド・エスパダ プラス』
ちょいトレ英会話 「発音を即時評価! オンライン英会話サービス」
「掟破り系 ふるぼっこRPG アークサイン」
問題のActiveX
起動するとエラーに。
ターゲットとなる ActiveXは \WINNT\system32\hanbiton に入っている、「HUELauncher1_1_0_2.ocx」 です。
これにパッチを当てます。
ダウンロードはこちら
何をやっているかというと。
IShellDispatch4 *pDisp; CoInitialize(NULL); CoCreateInstance(CLSID_Shell,NULL,CLSCTX_INPROC_SERVER ,IID_IShellDispatch4,(void**)&pDisp); pDisp->ToggleDesktop(); pDisp->Release(); CoUninitialize(); |
と言う、青字の部分のXP以降専用のSHELL32.DLL OLEオブジェクト(処理はWinを押しながら+Dを押したのと同じ)を呼びだして、エラーチェックせずに関数を実行しているので、Windows 2000だとクラッシュするわけですが、この処理をSkipするように書き換えました。
ocxって拡張子をみれば分かると思うので、説明するまでもないのですが念のため、これはランチャー本体ではなく、ゲームがインストールされているか確認した上で、ランチャーを呼び出し、IDとログイン情報をランチャーに渡すアクティブXなので、ランチャー本体を改竄してる訳ではありません。
でも、標準フォルダに入ってないDLL入れるだけでも過剰反応する人居るので、厳密に規約違反かどうかは考えてたらきりないですが|・ω・)ノ
このランチャーのコード見ると、単に オブジェクトコールしてるんですが、これだけだと実はXPでも場合によっては正常に動作しなかったりします。
日本の運営の人がここ見てて、ランチャーの改善できるのならXPで出る不具合も直して、Win2000対応したコードを書くと、こんな感じなんで参考にしてもらえると良いかと|・ω・)ノ
HWND hWnd=FindWindowA("Shell_TrayWnd",NULL); if(CoInitialize(NULL))return; if(SUCCEEDED(CoCreateInstance(CLSID_Shell,NULL,CLSCTX_INPROC_SERVER,IID_IShellDispatch4,(void**)&pDisp)){ pDisp->ToggleDesktop(); pDisp->Release(); } else if(hWnd) PostMessage(hWnd,WM_COMMAND,0x0197,NULL); } CoUninitialize(); |
こうしないと、XPやVistaでも初期化失敗したらクラッシュしたり、一部の窓が残ったりしますよ。
なんか、『こんな機能もあるんだ』って、興味本位で、よく調べずに実装した印象があるんですがねぇ。
というわけで、起動しました。
ログイン
キャラ作成
クエスト1つ目
クエスト完了|・ω・)ノ 問題なしです。
ついでなのでエイカオンラインの方も
インストールから
なんか、プリウスオンラインを髣髴するのですが、もしやパクリげー・・・?
とりあえずランチャー起動。
起動しました。オンボードだとさすがに重いですね。
キャラ作成。
一通り問題なしですね
本来Win2000が動作対象になっているのに起動しないとか、流石ですね|・ω・)
Comments