2015/07/31

Windows10 インストールしてみました 今回もVB6.0動くようです

Windows10導入

 Windows10 Preview版を早速ダウンロードしてみました。

 Preview版は以下よりダウンロードできます。
http://windows.microsoft.com/ja-jp/windows/preview-coming-soon

 早速日本語版をと言いたいところですが、なぜか英語、英国、中文、ポルトガル語の4種類しかありませんでした。

 筆者は英語版の32bitと64bit版をダウンロードしました。

 VMPlayerでテストしてみましたが、テストしてみるだけなら 32bit版は10GB、64bit版は15GBのディスク容量があれば問題ないようです。
 英語版のOSはさすがにインストーラもメッセージも何もかも英語ですが、インストーラ開始時に現れるTime and CurrencyをJapanese、IMEをJapanに設定すると日本語入力も可能でした。

 スタートメニューはリークのとおり復活してました。

VB6.0は動くのか

 それと色々と話題になるVB6.0の動作ですが、とりあえず問題なく動作するように見えました。

 一部日本語入力制御を行っているテキストボックス(おそらくIMTextなど)で、全角かな制御にもかかわらず、半角カナ入力になる不具合が見受けられました。
 VB6.0系のシステムを使用される場合、このあたりは注意すべきでしょう。

2015/5/28追記
 IMTextの開発元であるGrapecity社のホームページに、IMTextのIME制御はWindows8から不具合があり、対処方法の記載がありました。

 Windowsのバージョン検出をしながらの対処になると思いますが、Windows10でも効果があるものかどうか検証してみたいと思います。

Windows10及び8ではIME制御が異なる

 Windows10というか8以降は、IME制御がアプリケーション間で共有されるように仕様が変わっています。
 前述のGrapecity社の記事にもそのように記載されており、この辺りを調整する必要がるようです。
 ウィンドウ自体にIME制御のスコープを合わせる方法については以下の記載で行えるようですが、こちらはVB.NETのコードであり、VB6.0ではメソッド自体がありません。
GcIme1.SetInputScope(GcTextBox1, GrapeCity.Win.Editors.InputScopeNameValue.Hiragana)
 今までならWinApiにてIMEを直接制御するところですが、なんとこの方法も通用しません。
 ということで、VB6.0でIMText内のIME制御を正常動作させるには、「コントロールパネルの設定を変更してIMEモードをスレッド単位で保持するように」するしかないようです。
 コントロールパネルからの設定変更方法はこちらに記載されています。Windows8の記事ですが、Windows10でも同じです。
 コントロールパネルからのIMEモード変更ですがUser権限があれば良く、実行したユーザのデスクトップのみの範囲での設定になります。
 プログラムの完全性という観点から言いますと、自動で設定したいところ、インストーラによる設定では、インストールを実施したユーザでのみ設定がなされるわけで、ユーザがことなれば設定が必要となります。
 自動で行うタイミングは、設定変更が必要なプログラムをまさに起動した時とすべきということですね。

自動で行う方法はないか?

 プログラム上で、設定変更を行う方法としてPowerShellによる設定変更が行えました。
 コマンドプロンプトからは以下のコマンドで設定変更が行えます。(こちらを参考にさせてもらいました。)
PowerShell Set-WinLanguageBarOption -UseLegacySwitchMode
 これを自動で行う方法として以下のように実装しました。
    (1)OSバージョンを調べる
    こちらにWinApiでバージョンを調べる方法が記載されています。
    ちなみにWindows8以降は、メジャー番号 6、マイナー番号 2ですので、それより低い番号かどうかで判定出来ます。

    (2)Win8以降のOSならIMEのスレッド実行モードか調べる
    こちらに記載のあるとおり、HKEY_CURRENT_USER\Control Panel\Desktopキーのエントリ名:UserPreferencesMaskの内容を参照し、5バイト目と&H80をAND演算してONになればスレッド実行モード、OFFになれば通常実行モードとの判定が可能です。

    (3)IMEスレッドモードでなければ、PowerShellでIMEをスレッドモードに変更する
    shell("PowerShell Set-WinLanguageBarOption -UseLegacySwitchMode",vbHide)にて設定変更を行います。
    コマンドが終わった時点で設定変更がなされるため、WinApiにてShellから起動したプログラムの終了を待ったほうが良いと思います。

 Windows7までのOSでPowerShell Set-WinLanguageBarOption -UseLegacySwitchModeを動かしてしまうとエラーが発生するので、面倒でも上記手順を踏むしか無いように思います。
 ともかくこの処理の導入にて、Windows7と同じような動作が可能となりました。
 何かの参考になればと思います。


 Windows10はなんだか非常に普通に迷わず使えるベターチューニングされたWindows7+8+8.1という感じを受けました。
 顧客展開しても混乱は最小限とおもいます。2015/夏出荷ということですから、あっという間ですね。

 それではまた。

3 コメント:

  1. windows10 プレビュー版32ビットで既存 VB6.0システムをインストールして見ました。
    サクサクと問題なく使えました。マイクロソフトに感謝したいです。

    windows10 プレビュー版はおっしゃる通りWindows7+8+8.1のような気がします。
    core2 duoの不要なマシンにインストールしましたが、サクサク動作が早いですね。
    しかしストアとか、windows8から発生したメトロ系のアプリは相変わらず起動が遅いです。

    .NETのレポート系の遅さ、初期読み込み時の遅さが改善されるまで、VB6.0で続行です。

    返信削除
    返信
    1. コメントいただいていたのに、非常に返信が遅れまして申し訳ございません。
      このブログのテンプレート、google+コメントと同一化すると、サイト管理者でもコメントが見えなくなるようで、重ねて申し訳ございませんでした。
      当方も、VB6.0での続行要望は多いです。なんといっても費用の問題が大きいのですが、.NET系のメリットがUTFによる文字種類の増加ぐらいしかメリットが見当たらないのでどうしても仕方ないです。

      削除
  2. このコメントはブログの管理者によって削除されました。

    返信削除

post