メイン

Windows 8 アーカイブ

2012年11月13日

[Windows 8][Windows ストア アプリ] Windows 8 の WinRT アプリのインストール方法 - サイドローディング (WinRT アプリ の Windows ストアを介さないインストール方法) 等

Windows 8 の WinRT アプリ (Metroスタイル アプリと呼ばれていたもの、Windows ストア アプリとも *1) のインストール方法についてまとめてみる。

(*1) WinRT アプリには「Windows ストア アプリ」と云う呼び方もある。但し、「Windows ストアにある Windows ストアに WinRT アプリでないデスクトップ アプリがあったらそれは Windows ストア アプリなのか?」とか「Windows ストアを介さない WinRT アプリは Windows ストア アプリなのか?」等の疑問が残り、必ずしも「WinRT アプリ = Windows ストア アプリ」とは云えないかも知れない。(*2)

(*2) かつて「Metro スタイル」と呼ばれていたスタイルは「Microsoft デザイン スタイル」と呼ばれるようになったらしい。一方、WinRT は Windows 8 の新ランタイムで、Windows ストア アプリが主に使用している。

WinRT アプリをインストールする方法は以下の通り。

  1. Windows ストアを介して配布
    1. Windows ストア開発者になるための手順」に従い(Microsoft アカウントと結び付けられた) Windows ストア開発者アカウントを取得する。
    2. マイクソフトとアプリ開発者契約を結ぶ (個人は年間4900円。現在は MSDNサブスクリプションを購入していれば一年分無料。企業は年間9,800円)。
    3. Windows ストアに作成したアプリを提出。
    4. 審査が通り Windows ストアに並んだら、Windows ストアからインストールできる。
  2. 開発者が Visusal Studio からテストのために実行 (Visual Studio から)
    1. Windows ストア開発者アカウントを取得する。
    2. 開発者用ライセンス (無償) をインストールする。
      ※ 上述の Windows ストア開発者アカウントが必要だが、上述のアプリ開発者契約は不要。
      Visual Studio からインストール可能。ない場合は、初回起動時に警告が出るので、その指示に従えばインストールできる。
    3. テストのために起動。テスト用にアプリがインストールされる。
  3. 開発者が Visusal Studio からテストのために実行 (手動インストール)
    1. Windows ストア開発者アカウントを取得する。
    2. 開発者用ライセンス (無償) をインストールする。
      ※ 上述の Windows ストア開発者アカウントが必要だが、上述のアプリ開発者契約は不要。
      ・管理者権限で起動した PowerShell のプロンプトから Show-WindowsDeveloperLicenseRegistration コマンドレットで開発者用ライセンスをインストールできる。
      例.
      > Show-WindowsDeveloperLicenseRegistration
    3. アプリを手動インストールする。
      ・管理者権限で起動した PowerShell のプロンプトから Add-AppxPackage コマンドレットでアプリをインストール。
      例.
      > Add-AppxPackage -Register .\AppxManifest.xml
  4. サイドローディング
    ※ Windows Store を介さずに WinRT アプリをインストールすることができ、この方法をサイドローディング (Sideloading) と云う。
    以下に説明がある。 手順
    1. Windows8 Enterprise Edition または Windows Server 2012 で Active Directoryドメインに参加する。
    2. ドメインのグループ ポリシーでサイドローディングを許可 (グループ ポリシー エディターで「信頼できるすべてのアプリのインストールを許可する」を有効にする)。
    3. 信頼されたルート証明書機関からの証明書でアプリを署名
    4. アプリをインストール
      ・管理者権限で起動した PowerShell のプロンプトから Add-AppxPackage コマンドレットでアプリをインストール。
    ※ Windows 8 Enterprise や Windows Server 2012 以外のエディションの Windows や、ドメインに参加していない Windows 8 Enterprise PC でサイドローディングを有効にするには、サイドローディング プロダクト キーのライセンス認証を行う必要がある。

2012年11月15日

[Windows 8/10] 日本語キーボードのノートPCで外付け英語キーボードを使用する方法

【Windows 8/10】 日本語キーボードのノートPCで外付け英語キーボードを使用する方法

日本語キーボードのノートPCに USB接続で外付け英語キーボードを使用したいことがある。

私の場合で云えば、プログラミングを行う際等に愛用の Happy Hacking Keyboard を使いたい場合がある。
(英語配列の Happy Hacking Keyboard は私にはとても具合が良い。 キー数が少なくコンパクトなところが良い。
勿論、日本語のローマ字入力にも支障がないし、Mac でも Windows マシンでも問題ない。 後ろのディップスイッチを切り替えることで、スペース キーの左右のキーを Mac では【command キー】、Windows マシンでは【Windows キー】として使うことができるのだ)

ところが、その儘の日本語 Windows 8/10 で英語キーボードを外付けすると、日本語キーボードとはキー配列が異なる為に不都合が生じる。
【@】や【"】を始めとする幾つかの記号の配置が異なるのだ。

キーボードを換える度に再起動せずに、この不都合を解消する方法がほしい。
USJP Pro」 と云う専用のソフトウェアがあるが、Windows 8/10 に正式対応していないし、有料だ。

そこで、レジストリを書き換える方法を試した。
この方法では、一度設定してしまえば、英語キーボードを繋ぐ度に設定したり再起動したりする必要がない。

※ レジストリ・エディタの使用には注意が必要だ。試される方は、自己責任でお願いしたい。

■ 試した環境

今回は以下の環境で試した。

  • 日本語キーボード ノートPC: DELL LATITUDE E4310
  • 外付け英語キーボード (USB接続): PFU Happy Hacking Keyboard Professional (PD-KB300NL)
  • OS: Windows 8/10 (64bit/日本語)
  • 日本語入力: MS-IME
試した環境
試した環境

■ 設定方法

実際の設定方法は以下の通り。レジストリの書き換えと言語の追加を行った。

  1. レジストリの書き換え
    先ずは「レジストリの書き換え」を行った。
    1. レジストリ エディターの起動
      1. 【Windows キー】+【X キー】で、メニューを表示
      2. メニューから「ファイル名を指定して実行」を選ぶ
      3. 「regedt32」と入力し、「OK」ボタンを押す
        「ファイル名を指定して実行」で「regedt32」と入力
        「ファイル名を指定して実行」で「regedt32」と入力
      4. ユーザー アカウント制御のメッセージ ボックスが表示されたら、「OK」ボタンを押す
        ユーザー アカウント制御のメッセージ ボックス
        ユーザー アカウント制御のメッセージ ボックス
      5. レジストリ エディターが起動する
    2. レジストリ エディターでの書き換え
      1. レジストリ エディターのメニューの「編集」-「検索」を選ぶ
      2. 「検索する値」に「LayerDriver JPN」と入力し、「次を検索」ボタンを押す
        「LayerDriver JPN」の検索
        「LayerDriver JPN」の検索
      3. 見つかった「LayerDriver JPN」をダブル クリックし、値のデータを「kbd106.dll」から「kbd101.dll」に変更し、「OK」ボタンを押す
        「LayerDriver JPN」の値のデータを「kbd101.dll」に変更
        「LayerDriver JPN」の値のデータを「kbd101.dll」に変更
      4. レジストリの変更を反映させるため、PC を再起動する
  2. 言語の追加
    次に「言語の追加」を行った。
    1. 【Windows キー】+【X キー】で、メニューを表示
    2. メニューから「コントロール パネル」を選ぶ
    3. 「コントロール パネル」で「時計、言語、および地域」の「言語」を選択
      「コントロール パネル」-「時計、言語、および地域」-「言語」を選択
      「コントロール パネル」-「時計、言語、および地域」-「言語」を選択
    4. 「言語の設定の変更」が表示されるので、「言語の追加」を選択
      「言語の設定の変更」
      「言語の設定の変更」
    5. 「言語の追加」が表示されるので、「English (英語)」を選び、「開く」ボタンを押す
      「言語の追加」
      「言語の追加」
    6. 「地域のバリエーション」が表示されるので、「英語(米国)」を選び、「追加」ボタンを押す
      「地域のバリエーション」
      「地域のバリエーション」
    7. 「言語」で「日本語」の下に「English (United States)」が表示される
      「言語」が追加された
      「言語」が追加された
    8. ちなみに、この時「English (United States)」の「オプション」は以下のようになっている
      「English (United States)」の「オプション」
      「English (United States)」の「オプション」

■ 設定後の操作方法

以上で、英語キーボードを繋いでも繋いでもノート PC の日本語キーボードでは、日本語の配列で入力ができ、英語キーボードを繋げば、英語キーボードでは英語の配列で入力できるようになった。
先に述べたように、以降、英語キーボードを繋ぐ度に設定したり再起動したりする必要はない。

それぞれのキーボードで、以下のように【英数字直接入力】と【かな漢字変換】を切り替えられるようになった。

○ 【英数字直接入力】と【かな漢字変換】への切り替え方法
  • ノートPC上の日本語キーボード: 【Alt キー】+【半角/全角キー】
  • 外付け英語キーボード: 【Alt キー】+【` キー】(【~ キー】)

また、以下のようにすると【日本語キーボード入力モード】と【英語キーボード入力モード】を切り替えることができる。
尤も、こちらは余り使わないかも知れない。

○ 【日本語キーボード入力モード】と【英語キーボード入力モード】への切り替え方法
  • 【Alt キー】+【Shift キー】
  • 【Windows キー】+【スペース キー】で、以下のメニューとともに切り替えられる
    「Windows キー + スペース キー」で出るメニュー
    【Windows キー】+【スペース キー】で出るメニュー

続きを読む "[Windows 8/10] 日本語キーボードのノートPCで外付け英語キーボードを使用する方法" »

2012年11月20日

[Windows 8][Windows Store アプリ][XAML] Windows Store アプリと Windows Phone アプリ、Silverlight アプリ、WPF アプリでソースコードを共通化する方法に関する記事

Windows Store アプリと Windows Phone アプリ、Silverlight アプリ、WPF アプリは、どれも XAML を使って開発することができ、共通する部分も多い。

そこで、これらでソースコードを共通化する方法に関する記事を紹介する。

先ずは @IT の岩永 信之氏の記事から。"Portable Class Library" と呼ばれるマルチ プラットフォーム クラス ライブラリによるソースコードの共通化、MVVMパターンによるビューとモデルの分離方法について、判りやすく書かれている。

  • XAMLファミリ共通開発のすゝめ - @IT

続いて Windows Store アプリ開発に関する記事を多く書かれている山本 康彦氏のスライドから。

こちらでは、スライドの30ページ目から Portable Class Library について書かれている。

このスライドでは以下の記事が引用されている:

この記事では、MVVM パターンを用いている。各プラットフォーム用に View を分け、Model と ViewModel を Portable Class Library で共通化することを推奨している。

Portable Class Library に関して幾つか他の記事を紹介する:

プラットフォーム間での XAML の違いについては、以下の記事も参考になる:

2012年12月02日

[Windows 8] Windows ストア アプリ「Fresh Paint」の紹介

Windows 8 と云えば、タブレットに特化した新しい UI のデザイン (マイクロソフト デザイン) が特徴だ。

今回は、その新しいデザインをタブレットで楽しむのに最適な Windows Store アプリをご紹介しよう。

「Fresh Paint」だ。

Fresh Paint は、素晴らしい UX (ユーザーエクスペリエンス) を持ったペイントアプリだ。

Windows 8 のスタート画面にあるウィンドウズ ストアで "Fresh Paint" で検索すると見つかる。

ウィンドウズ ストアで Fresh Paint の検索
ウィンドウズ ストアで Fresh Paint の検索

次のリンクからも行くことができる。

ウィンドウズ ストアで見つかった Fresh Paint
ウィンドウズ ストアで見つかった Fresh Paint

Fresh Paint は、何と無料だ。

対象年齢は三歳以上となっている。
幼児から大人まで十分にお絵かきが楽しめるだろう。

使ってみよう

Windows ストアからのインストールはとても簡単だ。

インストールが終わったら、スタート画面にタイルが出来ている筈だ。
早速起動してみよう。

Fresh Paint の起動画面
Fresh Paint の起動画面

起動するとこんな感じだ。

Fresh Paint が立ち上がったところ
Fresh Paint が立ち上がったところ

タブレットなら画面上下からのスワイプ、マウスなら右クリック、キーボードからなら Windows + Z で、パレットやアプリバーを開閉できる。

これが何とも心地よい。

Fresh Paint - パレットやアプリバーを閉じた白紙全体が見えている状態
Fresh Paint - パレットやアプリバーを閉じた白紙全体が見えている状態
Fresh Paint - パレットやアプリバーを出したところ
Fresh Paint - パレットやアプリバーを出したところ
Fresh Paint - パレットやアプリバーを出したところ
Fresh Paint - パレットやアプリバーを出したところ

パレットはサーフェスと云うものに切り替えることが出来る。
ここでは紙を選んだり出来るのだ。

Fresh Paint - パレットからサーフェスに切り替えたところ
Fresh Paint - パレットからサーフェスに切り替えたところ

カメラで撮影したり、読み込んだりした写真を下地にすることも出来る。 写真に落書きするのにも使えるのだ。

Fresh Paint - カメラで撮影したり読み込んだりした写真
Fresh Paint - カメラで撮影したり読み込んだりした写真

タブレットで描いてみる

マウスでもそこそこ描けるが、矢張りこの UI が生きるのはタッチによる入力だろう。

SONY VAIO Duo 11で試してみることにした。

SONY VAIO Duo 11 は、Windows 8 搭載で、タブレット スタイルとノートPC スタイルを簡単に切り替えることができるのだ。

Fresh Paint - タブレットで起動したところ
Fresh Paint - タブレットで起動したところ
Fresh Paint - タブレットで指で描画
Fresh Paint - タブレットで指で描画

矢張りとても自然に使える。

とても自然な感覚で、マウスを使っているときのような間接的な感じがない。

ストレスなく描ける。

子供の頃、直接指に絵具を付けて画用紙に書いたことがあるが、あの感覚だ。

いや。あの感覚以上だ。指先が筆になったようだ。

良いスタイラス ペンが欲しいところだ。
きっと、指とはまた違った素敵な描き心地になることだろう。

パレットが秀逸

兎に角パレットの使い心地が堪らない。

出て来るときの感じ。
絵具をパレットに出す感じ。
色を混ぜる感じ。
水を加えて更に混ぜる感じ。

Windows 8 ならではの、描いてるときはフル画面、必要なときに上から指で引っ張り出す、と云う UI にとてもマッチしている。

文章と写真だけでは伝わりにくいだろう。
動画を撮ってみた。


この動画へのリンク
この動画へのリンク

いかがだろうか。

Windows 8 ならではのユーザー エクスペリエンス

Windows 8 と云えば、タブレットに特化した新しい UI のデザイン (マイクロソフト デザイン) が特徴だ。

タッチを使って、これまでの Windows にない、新しい体験がしたいならお勧めのアプリだ。

まるで本物のパレットとイーゼルを使っているような体験が出来るだろう。

特に Windows 8 ならではパレットの使い心地は、是非味わってもらいたい。

紙と筆のよう

こうしたアプリを使っていると、ユーザー体験の大切さを改めて感じる。

紙と筆のようであること。

ユーザーにとって、自然な体験であること。

子供の頃から慣れ親しんだ紙と筆のように使えること。

そして、紙と筆のようでないこと。

紙と筆にはない新しい体験があること。

私は Windows ストア アプリの開発者でもあるのだが、Fresh Paint を使っていて開発者にとって大事なことを学んだ気がした。

[Windows 8] Windows ストア アプリ「Note Anytime」の紹介

Windows ストア アプリ「Fresh Paint」の紹介」と云う記事で Windows 8 ならではのユーザーエクスペリエンスの Fresh Paint を紹介した。

今回は、同じく素晴らしい UX のノート アプリ「Note Anytime」をご紹介する。

Note Anytime

今回は、Windows 8 や Windows RT タブレットでノートを取るのに最適な Windows Store アプリをご紹介しよう。

Windows 8 のスタート画面にあるウィンドウズ ストアで "Note Anytime" で検索すると見つかる。

ウィンドウズ ストアで Note Anytime の検索
ウィンドウズ ストアで Note Anytime の検索

次のリンクからも行くことができる。

ウィンドウズ ストアで見つかった Note Anytime
ウィンドウズ ストアで見つかった Note Anytime

説明のところには次のように書いてある。

★★★Note Anytimeは、MetaMoJiの"こだわり"をもって作られた世界最高のノートアプリです。しかも無料。★★★

これは嘘ではない。

是非次の紹介ビデオを観て欲しい。このノート アプリの凄さが判るだろう。

[Note Anytime] イントロダクション (for Windows)

Note Anytime を使ってみよう

Windows ストア アプリなので、インストールはとても簡単だ。

インストールが終わったら、スタート画面にタイルが出来ているので、ここから起動しよう。

Note Anytime の起動画面
Note Anytime の起動画面
Note Anytime の起動直後
Note Anytime の起動直後

起動するとこんな感じだ。

Note Anytime のサンプルを開いたところ
Note Anytime のサンプルを開いたところ

このアプリには、良いスタイラス ペンを使うべきだろう。

Note Anytime のツール パレットとメニュー
Note Anytime のツール パレットとメニュー

丸いツール パレットが特徴的だ。
このパレットでペンを選んだり、文字入力に切り替えたり、様々なことを書いている近くで行えるようになっている。

マウスよりも、指やスタイラス ペンを意識した UI だ。

特にスタイラス ペンでの操作に最適だろう。

Note Anytime のペンの設定画面
Note Anytime のペンの設定画面
Note Anytime のライブラリ
Note Anytime のライブラリ

ライブラリでは様々なアイテムを選んで使うことができる。

自分で Note Anytime で描いた絵や書いた字をアイテムとしてライブラリに登録することもできる。

Note Anytime のオブジェクト
Note Anytime のオブジェクト

ノートの描画要素はオブジェクトとして配置されている。

つまり、個個の描画要素は後で消したり、移動したり、変形したり、回転したりできる。

Windows 8 ならではのユーザー エクスペリエンス

Fresh Paint もそうだが、Note Anytime Windows 8 に特徴的な新しい UX を存分に楽しめるアプリだ。

是非体験してみて欲しい。

[Windows 8] Windows 8 の使い方を学びたい人のためのリンク集

Windows 8

今年の10月26日に Windows 8 が出てから暫く経った。
使い始めている方も多いだろう。

中には、新しいユーザー インタフェイスの使い方にまだ馴染めずにいる方もいるかも知れない。

そこで、今回は、Windows 8 の使い方などを知ることができる記事を紹介したい。

以下の記事をざっと参考にすれば、Windows 8 を使いこなせるようになるだろう。

Windows 8 の使い方を学びたい人のためのリンク集

先ず、Windows 8 の使い方全般を知りたい人はこちら。

  • Windows 8 レボリューション - @IT
    ここでは以下のことを知ることが出来る。
    • 新しいユーザー・インターフェイスの紹介
    • ユーザー・アカウントの設定方法
    • Surface の紹介
    • Windowsストア・アプリのインストール方法
    • タッチ、マウス、キーボードによる操作の方法

Windows 8 と Windows RT では、タッチ操作が特徴的だ。
その一覧はここで。

Windows 8 と Windows RT では、キーボード ショートカットでチャームを開いたり、アプリバーを開いたり、様様なことが出来る。
その一覧はここで。

Windows 8 で標準でサポートされていない DVD 再生をするための Windows 8 Media Center Pack を 1月31日まで無料で入れることが出来る。
Windows 8 Pro 向けだ。
こちらで。

Windows 8 の新しい UX を体験するための新 PC を買いたい人向け記事はこちら。

Windows 8 に関する最新記事を読みたい方はこちら。

Windows 8 の使い方を動画で学びたい方はこちら。

  • Windows 8 使い方 動画マニュアル

    Windows 8の使い方を解説した動画が多く用意されている。
    幾つか紹介してみよう。
    • Windows 8 使い方  シャットダウン・再起動・スリープ
      (1分10秒)
    • Windows 8 スタート画面の色やデザインを変更する方法
      (1分23秒)
    • スタート画面にアプリを追加する方法 (ピン留め) Windows 8 使い方
      (55秒)
    • Windows8 2つのアプリを並べて表示させる方法
      (1分13秒)
    • Microsoftアカウントを作成してログインアカウントに設定 Windwows8 使い方
      (2分31秒)
    • Windows 8 でコントロールパネルを開く方法
      (1分32秒)

以上を参考に、是非新しくなった Windows をより便利に体験して頂きたい。

2012年12月19日

[Windows 8][Windows ストア アプリ] Windows 8 ストア アプリ開発資料リンク集

Windows 8

Windows 8 の ストア アプリ開発を始めるにあたり、参考にさせていただいたサイトをご紹介する。

2012年12月20日

[Windows 8][Windows ストア アプリ][C#] ポータブル クラス ライブラリに関する検証

Windows 8 Store apps Advent Calendar の 20日目のエントリー。

以前、「Windows Store アプリと Windows Phone アプリ、Silverlight アプリ、WPF アプリでソースコードを共通化する方法に関する記事」と云う記事でポータブル クラス ライブラリに関して少しだけご紹介した。

今回は、ポータブル クラス ライブラリについて、更に調べてみよう。

■ アプリケーションの種類と .NET Framework の違い

Windows ストア アプリで参照している .NET は、他のアプリケーションで参照しているものと少し異なる。

その様子を先ず確認してみよう。

現時点で最新の環境で何種類かのアプリケーションをデフォルトで追加してみて、参照している .NET を見てみる。

・コンソール アプリケーションとクラス ライブラリの場合 (.NET Framework 4.5)
コンソール アプリケーションとクラス ライブラリで参照している .NET
コンソール アプリケーションとクラス ライブラリで参照している .NET
・WPF の場合 (.NET Framework 4.5)
WPF アプリケーションで参照している .NET
WPF アプリケーションで参照している .NET
・Silverlight の場合 (Silverlight 5)
Silverlight アプリケーションと Silverlight クラス ライブラリで参照している .NET
Silverlight アプリケーションと Silverlight クラス ライブラリで参照している .NET
・Windows Phone の場合 (Windows Phone OS 8.0)
Windows Phone アプリと Windows Phone クラス ライブラリで参照している .NET
Windows Phone アプリと Windows Phone クラス ライブラリで参照している .NET

「.NET for Windows Phone」となっている。

・Windows ストア アプリの場合
Windows ストア アプリとWindows ストア クラス ライブラリで参照している .NET
Windows ストア アプリとWindows ストア クラス ライブラリで参照している .NET

こちらでは、「.NET for Windows Store apps」となっているのが判る。

■ IsSubclassOf 等による検証

つまり、これらで参照している .NET は、全てが共通な訳ではない。

コア部分は共通なのだろうか?

私が試してみたところ、System 名前空間の付近でも微妙な違いがあるようだ。

今回は、以下のようなコードを用いて、この辺りを検証してみたい。

// コンソール アプリケーション
// .NET Framework 4.5

using System.Reflection; // ※ GetRuntimeProperties に必要

class Program
{
    class Super { }
    class Sub : Super
    {
        public int Number { get; set; }
        public string Name { get; set; }
    }

    static void Test()
    {
        var sub = new Sub();

        bool result1 = sub.GetType().IsSubclassOf(typeof(Super));
        bool result2 = sub.GetType().IsAssignableFrom(typeof(Super));
        bool result3 = sub is Super;

        var properties1 = typeof(Sub).GetProperties();
        var properties2 = typeof(Sub).GetRuntimeProperties();
    }
        
    static void Main()
    {
        Test();
    }
}

これはコンソール アプリケーションのソースコードだが、正常にコンパイルでき、正常に動作する。

Visual Studio のデバッガーで値を確認してみると、次のようになった。

コンソール アプリケーションの場合の実行結果 1
コンソール アプリケーションの場合の実行結果 1
コンソール アプリケーションの場合の実行結果 2
コンソール アプリケーションの場合の実行結果 2
コンソール アプリケーションの場合の実行結果 3
コンソール アプリケーションの場合の実行結果 3
・WPF と Silverlight の場合

同様のことを、WPF と Silverlight の場合で試してみると次のようになる。

先ず WPF から。

// WPF アプリケーション
// .NET Framework 4.5

using System.Windows;

namespace WpfApplication
{
    using System.Reflection; // ※ GetRuntimeProperties に必要
    
    public partial class App : Application
    {
        class Super { }
        class Sub : Super
        {
            public int Number { get; set; }
            public string Name { get; set; }
        }

        static void Test()
        {
            var sub = new Sub();

            bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
            bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
            bool result3 = sub is Super; // ○ OK

            var properties1 = typeof(Sub).GetProperties(); // ○ OK
            var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
        }
        
        public App()
        {
            Test();
        }
    }
}

WPF では問題なく、全てコンパイルでき、正常に動作する。

参照している .NET が同じ .NET Framework 4.5 なので、当たり前と云えば当たり前だ。

次に Silverlight。

// Silverlight 5

using System;
using System.Windows;

namespace SilverlightApplication
{
    using System.Reflection; // ※ GetRuntimeProperties に必要

    public partial class App : Application
    {
        class Super { }
        class Sub : Super
        {
            public int Number { get; set; }
            public string Name { get; set; }
        }

        static void Test()
        {
            var sub = new Sub();

            bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
            bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
            bool result3 = sub is Super; // ○ OK

            var properties1 = typeof(Sub).GetProperties(); // ○ OK
            var properties2 = typeof(Sub).GetRuntimeProperties(); // × コンパイル エラー
        }

        public App()
        {
            Test();

            // ... 以下省略 ...
        }

        // ... 以下省略 ...
    }
}

Silverlight の方は、次のようなコンパイル エラーになる。

  • エラー 1 'System.Type' に 'GetRuntimeProperties' の定義が含まれておらず、型 'System.Type' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

この GetRuntimeProperties は、 System.Reflection 名前空間の RuntimeReflectionExtensions クラスが持つ拡張メソッドだ。

.NET Framework 4.5 で使えるようになったものだが、Silverlight では使えないようだ。

・Windows Phone の場合

ちなみに、Windows Phone では次のようになる。

// Windows Phone OS 8.0

using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneApp.Resources;
using System.Diagnostics;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Navigation;

namespace PhoneApp
{
    using System;
    using System.Reflection; // ※ GetRuntimeProperties に必要
    
    public partial class App : Application
    {
        class Super { }
        class Sub : Super
        {
            public int Number { get; set; }
            public string Name { get; set; }
        }

        static void Test()
        {
            var sub = new Sub();

            bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // ○ OK
            bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // ○ OK
            bool result3 = sub is Super; // ○ OK

            var properties1 = typeof(Sub).GetProperties(); // ○ OK
            var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
        }

        public App()
        {
            Test();

            // ... 以下省略 ...
        }

        // ... 以下省略 ...
    }
}

全て問題なくコンパイル・実行できる。

・Windows ストア アプリの場合

さて、Windows ストア アプリではどうなるだろうか。

こうなるのだ。

// Windows ストア アプリ

using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace WindowsStoreApp
{
    using System.Reflection; // ※ GetRuntimeProperties に必要
    
    sealed partial class App : Application
    {
        class Super { }
        class Sub : Super
        {
            public int Number { get; set; }
            public string Name { get; set; }
        }

        static void Test()
        {
            var sub = new Sub();

            bool result1 = sub.GetType().IsSubclassOf(typeof(Super)); // × コンパイル エラー
            bool result2 = sub.GetType().IsAssignableFrom(typeof(Super)); // × コンパイル エラー
            bool result3 = sub is Super; // ○ OK

            var properties1 = typeof(Sub).GetProperties(); // × コンパイル エラー
            var properties2 = typeof(Sub).GetRuntimeProperties(); // ○ OK
        }

        public App()
        {
            Test();

            // ... 以下省略 ...

            this.InitializeComponent();
            this.Suspending += OnSuspending;
        }

        // ... 以下省略 ...
    }
}

次のようなコンパイル エラーとなる。

  • エラー 1 'System.Type' に 'IsSubclassOf' の定義が含まれておらず、型 'System.Type' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
  • エラー 2 'System.Type' に 'IsAssignableFrom' の定義が含まれておらず、型 'System.Type' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
  • エラー 3 'System.Type' に 'GetProperties' の定義が含まれておらず、型 'System.Type' の最初の引数を受け付ける拡張メソッドが見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

なんと、System 名前空間の Type 型が IsSubclassOf や IsAssignableFrom を持っていないようだ。

実際に調べてみると、Windows ストア アプリが参照している System 名前空間の Type 型は以下の public メンバーを持っている。

// Windows ストア アプリが参照している System 名前空間の Type 型
// アセンブリ System.Runtime.dll, v4.0.0.0
// Framework\.NETCore\v4.5\System.Runtime.dll
namespace System
{
    public abstract class Type
    {
        public static readonly object Missing;

        public abstract string AssemblyQualifiedName { get; }
        public abstract Type DeclaringType { get; }
        public abstract string FullName { get; }
        public abstract int GenericParameterPosition { get; }
        public abstract Type[] GenericTypeArguments { get; }
        public bool HasElementType { get; }
        public bool IsArray { get; }
        public bool IsByRef { get; }
        public abstract bool IsConstructedGenericType { get; }
        public abstract bool IsGenericParameter { get; }
        public bool IsNested { get; }
        public bool IsPointer { get; }

        public abstract string Name { get; }
        public abstract string Namespace { get; }
        public virtual RuntimeTypeHandle TypeHandle { get; }

        public override bool Equals(object o);
        public bool Equals(Type o);
        public abstract int GetArrayRank();
        public abstract Type GetElementType();
        public abstract Type GetGenericTypeDefinition();
        public override int GetHashCode();
        public static Type GetType(string typeName);
        public static Type GetType(string typeName, bool throwOnError);
        public static Type GetTypeFromHandle(RuntimeTypeHandle handle);
        public abstract Type MakeArrayType();
        public abstract Type MakeArrayType(int rank);
        public abstract Type MakeByRefType();
        public abstract Type MakeGenericType(params Type[] typeArguments);
        public abstract Type MakePointerType();
        public override string ToString();
    }
}

IsSubclassOf、IsAssignableFrom、GetProperties 等が見当たらない。

一方、通常の .NET Framework 4.5 の名前空間の Type 型は遥かに多くの public メンバーを持っている。

// 通常の .NET Framework 4.5 の名前空間の Type 型
// アセンブリ mscorlib.dll, v4.0.0.0
// Framework\.NETFramework\v4.5\mscorlib.dll
namespace System
{
    public abstract class Type : MemberInfo, _Type, IReflect
    {
        bool IsSubclassOf(Type c);
        bool IsAssignableFrom(Type c);
        PropertyInfo[] GetProperties();
        
        // ...その他遥かに多くのメンバー...
    }
}

先ず、アセンブリが異なる。Windows ストア アプリの方は、 mscorlib.dll ではなく System.Runtime.dll だった。

また、こちらは Windows ストア アプリの方の Type と異なり、「class Type : MemberInfo, _Type, IReflect」となっているのが判る。

この中の _Type は実は interface で、以下のように IsSubclassOf、IsAssignableFrom、GetProperties を含む多くのメンバーを持っているのだ。

// 通常の .NET Framework 4.5 の名前空間の Type 型が実装している interface _Type
namespace System.Runtime.InteropServices
{
    public interface _Type
    {
        bool IsSubclassOf(Type c);
        bool IsAssignableFrom(Type c);
        PropertyInfo[] GetProperties();
        
        // ...その他多くのメンバー...
    }
}

■ ポータブル クラス ライブラリによる解決

では、ポータブル クラス ライブラリを利用した場合はどうなるだろうか。

・ポータブル クラス ライブラリの作成

先ず、ポータブル クラス ライブラリを作成する。

ポータブル クラス ライブラリの作成
ポータブル クラス ライブラリの作成

今回は、ターゲット フレームワークとしてデフォルトの儘、.NET Framework 4.5、Silverlight 4 以上、Windows Phone 7 以上、.NET for Windows Store apps を選ぶ。

ポータブル クラス ライブラリの作成
ポータブル クラス ライブラリの作成

ソースコードは以下の通り。

Type 型の IsSubclassOf、IsAssignableFrom、GetProperties をそれぞれ呼ぶだけのメソッドを用意することにする。

// ポータブル クラス ライブラリ
//
// ターゲット フレームワーク:
// ・.NET Framework 4.5
// ・Silverlight 4 以上
// ・Windows Phone 7 以上
// ・.NET for Windows Store apps

namespace PortableClassLibrary
{
    using System;
    using System.Reflection;

    public static class TestClass
    {
        public static bool IsSubclassOf(Type sub, Type super)
        {
            return sub.IsSubclassOf(super);
        }

        public static bool IsAssignableFrom(Type type1, Type type2)
        {
            return type1.IsAssignableFrom(type2);
        }

        public static PropertyInfo[] GetProperties(Type type)
        {
            return type.GetProperties();
        }
    }
}

これは問題なくコンパイルできる。

ちなみに、このポータブル クラス ライブラリで参照している Type 型は次のようなものだ。

// このポータブル クラス ライブラリが参照している Type 型
// アセンブリ mscorlib.dll, v2.0.5.0
// Framework\.NETPortable\v4.0\Profile\Profile4\mscorlib.dll
namespace System
{
    public abstract class Type : MemberInfo
    {
        bool IsSubclassOf(Type c);
        bool IsAssignableFrom(Type c);
        PropertyInfo[] GetProperties();
        
        // ...その他多くのメンバー...
    }
}

こちらは、IsSubclassOf、IsAssignableFrom、GetProperties 等を持っている。_Type interface は持っていない。

また、このポータブル クラス ライブラリが参照している .NET はこうなっている。

このポータブル クラス ライブラリが参照している .NET
このポータブル クラス ライブラリが参照している .NET

「.NET Portable Subset」となっている。

・作成したポータブル クラス ライブラリの参照

では、早速このポータブル クラス ライブラリを各アプリケーション (コンソール アプリケーション、WPF アプリケーション、Silverlight アプリケーション、Windows Phone アプリ、Windows ストア アプリ) でそれぞれ参照してみよう。

ポータブル クラス ライブラリの参照
ポータブル クラス ライブラリの参照

そして、各アプリケーションで、以下のようにこのポータブル クラス ライブラリの三つのメソッド、IsSubclassOf、IsAssignableFrom、GetProperties を呼んでみる。

    // 参照したポータブル クラス ライブラリの利用
    bool result4 = PortableClassLibrary.TestClass.IsSubclassOf(sub.GetType(), typeof(Super));
    bool result5 = PortableClassLibrary.TestClass.IsAssignableFrom(sub.GetType(), typeof(Super));
    var properties3 = PortableClassLibrary.TestClass.GetProperties(sub.GetType());

すると、コンソール アプリケーション、WPF アプリケーション、Silverlight アプリケーション、Windows Phone アプリ、Windows ストア アプリの何れでも、コンパイルでき、正常に動作する。

つまり、ポータブル クラス ライブラリにであれば、この部分のコードは共通化でき、且つそれぞれのアプリケーションから問題なく呼べるのだ。

■ 今回のまとめ

今回は、ポータブル クラス ライブラリに関して、調査をしてみた。

アプリケーションの種類によって、参照している .NET が異なるので、.NET のコア部分を使ったソースコードでも共通のものが使えないことがあることが判った。

ポータブル クラス ライブラリを使うことで、そのような部分のソースコードをより共通化することができるだろう。

2012年12月21日

[Windows 8] Windows 8 お役立ち記事リンク集

Windows 8 お役立ち記事リンク集

新しい Windows 8 を使ってみたい、でもデザインも大幅に変わったし、大丈夫かな?
そんなときに便利な、Windows 8 にまつわるお役立ち記事をまとめて、リンク集にしてみました。
執筆を担当するのは、マイクロソフトに最優秀技術者として表彰された「Microsoft MVP」* のメンバー!
Windows 8 へのアップグレード方法から便利なショートカットの紹介まで、幅広いトピックが満載です。
Windows 8 のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。

(このブログも参加しています)

Microsoft MVP ロゴ *Microsoft MVP (Most Valuable Professional) アワード プログラムは、マイクロソフトの製品やテクノロジーに関する豊富な知識と経験を持ち、オンラインまたはオフラインのコミュニティや、メディアなどを通して、その優れた能力を幅広いユーザーと共有している個人を表彰するものです。

(敬称略)

2012年12月23日

[Windows 8] Logicool Rechargeable Touchpad T650 の紹介

Logicool Wireless Rechargeable Touchpad T650 のモニターに参加したので、報告してみたい。

■ Touchpad T650 とは

Touchpad T650 は、Windows 7 及び Windows 8 対応のタッチパッドだ。

先ずは外観から。

T650 の箱
T650 はこのような箱に入って届けられた。

T650 の見た目
T650 の見た目はいたってシンプル。

T650 の裏
T650 の裏。下の二つのゴムはマウスの左右ボタンになっている。

T650 の充電用 USB ケーブル
T650 を充電する為の USB ケーブルが付属している。

T650 を横から見たところ
T650 を横から見たところ。かなり薄い。

T650 をノート PC の横に置いたところ
T650 をノート PC の横に置いたところ。左側に置く人も居るかも知れない。

T650 を Windows ストア アプリ開発に使っているときの様子
私が T650 を Windows ストア アプリ開発に使っているときの様子。

■ T650 の特長

・ワイヤレスで充電式

T650 は、ワイヤレスで充電式だ。
充電も簡単で長持ちするし、使用時には余計なコードがない。
この辺、かなり使い勝手が良い。

  • ワイヤレス
    • ロジクール独自のワイヤレス技術
  • 充電式
    • リチウムポリマー電池内蔵
    • フル充電で一箇月持つ
    • USB ケーブルで充電
・Windows 8 のジェスチャに対応

Windows 8 は、それ迄の Windows と比べ、一層タッチ インタフェイスへの対応を強めている。

従来のようにマウスとキーボードで使える他、マイクロソフト デザイン (一時 Metro デザイン呼ばれていたもの) と云う新しいデザインの UI は、タッチでの使用に適している。

T650 は、マウスのように使える他、この Windows 8 の新しいタッチ インタフェイスに対応している。

次のような Windows 8 のジェスチャを行うことが出来るのだ。

Windows 8 のジェスチャ - Logicool

■ SetPoint による設定

T650 は、Logicool SetPoint というソフトウェアを PC にインストールすることで、様様な機能をカスタマイズして便利に使えるようになっている。

この SetPoint の設定画面を見ていくことで、T650 にどのような機能があるかが判るようになっている。
前述した Windows 8 のジェスチャについてもどのように対応しているか判るだろう。

順番に見ていこう。

SetPoint によるクリックの設定
SetPoint によるクリックの設定。

マウスのようなクリック操作の設定はここで行う。


SetPoint による Windows の操作の設定
SetPoint で様様なジェスチャーを Windows 8 の各操作に割り当てることができる。

Windows 8 の新しい UI であるスタート画面とデスクトップ画面の切り替えやチャーム、アプリ バー、スナップ等を設定することが出来る。


SetPoint によるスクロール等の操作の設定
SetPoint によるスクロール等の操作の設定。

スワイプやピンチによって、スクロールや、ズーム、進む、戻る等を行うことが出来る。

SetPoint は、動画を見ながら判り易く設定することが出来る。

その実際の様子は、次の動画で見ることができる。

・Logicool Rechargeable Touchpad T650 SetPoint の動画 (音声なし)

■ マウスやタッチ スクリーンとの比較

実際に使ってみて感じた、マウスやタッチ スクリーンと比べた良い点・悪い点を述べる。

マウスとの比較
  • 良い点
    • マウスでは出来ないジェスチャが可能。
      Windows 8 の新しい UI をタッチスクリーンが無くても使うことが出来る。
  • 悪い点
    • マウスに慣れた人には、マウス程細やかなマウスカーソルの移動はしづらい気がする。
タッチスクリーンと比較
  • 良い点
    • スクリーンをタッチする訳ではないので、指によって画面が隠れることがない。
    • スクリーンに指紋が付かない。
    • タッチパッドの表面がとても滑らかで操作しやすい。
  • 悪い点
    • タッチする場合、タッチ スクリーンは直接タッチするポイントに指を持っていくだけだが、タッチパッドでは、スクリーン自体は触れない訳なので、マウス カーソルを移動してのタッチとなる。
      この点は、マウスのような使い勝手とならざるを得ない。
      その為、直感性に劣る。

■ まとめ

T650 は、マウスとタッチスクリーンの間にある製品だ。

慣れるに従い、かなり使いやすく感じてきている。

表面がガラスでとても滑らかなので、スクロール操作やズーム操作、アプリケーションの切り替えが心地良い。

タッチ スクリーンのない PC で Windows 8 を使いたい場合、マウスだけで使うのは勿体ない。

そんな時、T650 はとても良い選択肢ではないだろうか。


2012年12月27日

[Event][Windows 8][Windows ストア アプリ] VSUG DAY 2012 Winter 「Windows 8 ストア アプリ 開発 Tips」の資料公開

VSUG DAY 2012 Winter 2012.12.15(Sat) マイクロソフト品川ビル31F

2012/12/15(土) VSUG DAY 2012 Winter の時の資料を公開します。

■ 関連リンク

2012年12月28日

[Event][Windows 8][Windows ストア アプリ] 「Community Open Day 2012 北陸」 (6月9日) での「JavaScript+HTML5 と C#+XAML で作る Windows8 アプリ」資料公開

大分前のものだが、「Community Open Day 2012 北陸」 (6月9日, 石川工業高等専門学校) での「JavaScript+HTML5 と C#+XAML で作る Windows8 アプリ」も公開。

■ 関連リンク

2013年02月26日

[Windows 8] Windows 8 お役立ち記事リンク集 (改訂版)

Windows 8 お役立ち記事リンク集

新しい Windows 8 を使ってみたい、でもデザインも大幅に変わったし、大丈夫かな?
そんなときに便利な、Windows 8 にまつわるお役立ち記事をまとめて、リンク集にしてみました。
執筆を担当するのは、マイクロソフトに最優秀技術者として表彰された「Microsoft MVP」* のメンバー!
Windows 8へのアップグレード方法から便利なショートカットの紹介まで、幅広いトピックが満載です。
Windows 8のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。

(このブログも参加しています)

Microsoft MVP ロゴ *Microsoft MVP (Most Valuable Professional) アワード プログラムは、マイクロソフトの製品やテクノロジーに関する豊富な知識と経験を持ち、オンラインまたはオフラインのコミュニティや、メディアなどを通して、その優れた能力を幅広いユーザーと共有している個人を表彰するものです。

(敬称略)

2013年03月27日

[Windows 8][Book] 『Windows 8 [業務アプリ] 開発読本』本日発売

Windows 8 [業務アプリ] 開発読本

私も執筆に加わった、『Windows 8 [業務アプリ] 開発読本』が、本日 (3/27) 発売になりました。

Windows 8 対応の業務アプリに関するノウハウが詰まった書籍です。

Microsoft MVP や Microsoft エバンジェリストなどのエキスパート12名によって書かれています。

内容は、以下のようになっていて、私は「特集1」の前半で「Windowsストア業務アプリ開発入門」と題して、C# と ASP.NET MVC、XAML による実際のコーディング方法をご紹介しています。

  • ▶巻頭企画: Windows 8 で[業務アプリ]はどう変わる? Windowsストアアプリ登場の理由とデスクトップアプリの今後
  • ▶特集1: はじめよう! Windowsストア[業務アプリ]開発入門
  • デスクトップアプリ開発とはここが違う! ~入門と作法,定石~
  • ▶特集2: エバンジェリストが考えるWindows 8 時代の業務システム開発
  • ▶特集3: クラサバ・ASP.NETシステム開発者のための Windows 8 時代に残すべき技術,捨てざるを得ない技術

関連記事

2013年04月03日

[Windows 8] Windows 8 お役立ち記事リンク集 (改訂版)

Windows 8 お役立ち記事リンク集

新しい Windows 8 を使ってみたい、でもデザインも大幅に変わったし、大丈夫かな?
そんなときに便利な、Windows 8 にまつわるお役立ち記事をまとめて、リンク集にしてみました。
執筆を担当するのは、マイクロソフトに最優秀技術者として表彰された「Microsoft MVP」* のメンバー!
Windows 8へのアップグレード方法から便利なショートカットの紹介まで、幅広いトピックが満載です。
Windows 8のことで困ったり、いまさら聞けないことがあったら、ぜひこれらの記事を参考にしてみてください。

(このブログも参加しています)

Microsoft MVP ロゴ *Microsoft MVP (Most Valuable Professional) アワード プログラムは、マイクロソフトの製品やテクノロジーに関する豊富な知識と経験を持ち、オンラインまたはオフラインのコミュニティや、メディアなどを通して、その優れた能力を幅広いユーザーと共有している個人を表彰するものです。

※ Windows ストア アプリの 「Windows 8 お役立ち記事リンク」もあります。 こちら
Windows ストア アプリ 「Windows 8 お役立ち記事リンク」

(敬称略)

About Windows 8

ブログ「プログラミング C# - 翔ソフトウェア (Sho's)」のカテゴリ「Windows 8」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはNAgileです。

次のカテゴリはXPです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35