Hanbit LauncherがWindows 2000で動作しない不具合解決

一昨日のアップデートでハンビットステーション にある一連のゲームが動作しなくなったという依頼が掲示板に上がっていたのでテストしてみました。

なお、影響を受けるゲームは以下の通り

ともに戦い成長するオンラインRPG『エイカ オンライン』
『グラナド・エスパダ プラス』
ちょいトレ英会話 「発音を即時評価! オンライン英会話サービス」
「掟破り系 ふるぼっこRPG アークサイン」

hue
問題のActiveX

hue2
起動するとエラーに。


ターゲットとなる 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でも初期化失敗したらクラッシュしたり、一部の窓が残ったりしますよ。

なんか、『こんな機能もあるんだ』って、興味本位で、よく調べずに実装した印象があるんですがねぇ。

granad
というわけで、起動しました。

granad2
ログイン

granad3
キャラ作成

granad4
クエスト1つ目

granad5
クエスト完了|・ω・)ノ 問題なしです。

ついでなのでエイカオンラインの方も
aika1
インストールから

aika2
なんか、プリウスオンラインを髣髴するのですが、もしやパクリげー・・・?

aika3
とりあえずランチャー起動。

aika4
起動しました。オンボードだとさすがに重いですね。

aika5
キャラ作成。

aika6
一通り問題なしですね

本来Win2000が動作対象になっているのに起動しないとか、流石ですね|・ω・)

関連サイト:
ともに戦い成長するオンラインRPG『エイカ オンライン』
『グラナド・エスパダ プラス』

関連記事:
Win2000でPrius Online をやってみた

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です