Windows SDKに含まれているInspectツールを使って、WindowsストアアプリのUIを構成しているコントロールを調べる方法を解説する。
powered by Insider.NET
公開されているWindowsストアアプリのUIを見て、「どうやって作ってあるのだろう」と知りたくなったことはないだろうか? そのようなときにInspectツールを使えば、どのようなUIコントロールが使われているのかを調べられる。本稿では、Inspectツールの使い方を解説する。
本稿の内容を実際に試してみるには、Windows 8(以降、Win 8)とWindows 8.1(以降、Win 8.1)が必要である。Inspectツールを使ってみるには、Win 8かWin 8.1のどちらかがあればよい。
最初に例として、Win 8.1用のWindowsストアアプリであるマイクロソフト製の「ヘルプ+使い方」アプリを見てみよう(次の画像)。
このアプリの詳細ページ(次の画像)は、見たところGridViewコントロールを使っているようだ。恐らく、その中のそれぞれのセル(=GridViewItemコントロール)に画像とテキストが入っているのであろう。
この詳細ページの画像には、タップすると動画を再生するものがある(上の画像の右端)。その部分はどうなっているのだろうか? Inspectツールを使って調べてみる(次の画像)。
すると、3つのコントロールを重ね合わせることで、タップすると動画を再生する画像が作られていると分かる。また、その下の文章の本文には、TextBlockコントロールやRichTextBlockコントロールではなく、WebViewコントロールが使われていることも判明する(次の図)。
このように便利なInspectツールについて、以降で解説していく。
Windows 8.x用のWindows SDKをインストールすればよい*1。
Windows SDKは、Visual Studioをインストールすると一緒にインストールされる。あるいは、次からダウンロードしてWindows SDKだけをインストールできる。
Visual Studioとともにインストールした筆者の環境では、次のパスの下にCPUアーキテクチャごとのフォルダーが作られ、そこにそれぞれのアーキテクチャ用のInspectツール(=inspect.exe)が置かれていた。
*1 Windows 7のWindows SDKには、Inspectツールの前身である「UISpy.exe(UI Spy)」が含まれていた(Windows 7以前は未確認)。なお、Windows VistaでもUI Spyは使えるが、WindowsオートメーションAPI(=UIオートメーションとMSAA*2)を別途インストールする必要がある。
Inspectツールはいつ起動してもよい。ただし、CPUアーキテクチャに合ったものを使う必要がある。
Inspectツールを起動すると、既定では常に最前面に表示される。Windowsストアアプリがアクティブな状態であってもその手前に表示される。Inspectツールのウィンドウは次の画像のような構成になっている。基本の操作は、左側のツリービューを展開していって目的のコントロールを見つけ、選択することだ。するとそのコントロールの情報が右側のデータビューに表示される。
*2 MSAA(Microsoft Active Accessibility)は、前世紀から使われている旧式のAPI。現在では、通常はUIオートメーションを使う。詳しくは「UI オートメーションと Microsoft Active Accessibility」などを参照。
WindowsストアアプリのUIは、XAMLまたはHTMLで作成できる。そのどちらで作られているかを知るには、データビューの[FrameworkId]を見ればよい。
例として「フォト」アプリを見てみよう。まずは、Win 8のものから。これは[FrameworkId]が[InternetExplorer]と表示されることから、HTMLで作成されたUIだと分かる(次の画像)。
次に、Win 8.1の「フォト」アプリを見てみよう(次の画像)。[FrameworkId]は[XAML]となっており、XAMLで作成されたUIだと分かる。
なお、Windowsストアアプリ以外のアプリでは、[FrameworkId]として[Win32](ネイティブなWin32APIを使用)/[WinForm]/[WPF]/[Silverlight]/[InternetExplorer]/[DirectUI]*3などが使われている。
*3 DirectUIはMicrosoft内部で使われているUIフレームワークで、一般には公開されていない。ネイティブアプリ用のWPFのようなものだとされる。Windows 8.xのExplorerやスタート画面など、あるいはWindowsストアアプリ起動時のスプラッシュスクリーンの表示にも使われている。また、Windowsストアアプリ版のInternet Explorerではアプリバーなどで使われており、Internet Explorerが純粋なWindowsストアアプリではないと分かる。なお、DirectUIの断片的な情報は、Visual Studioギャラリーの「DirectUI Gui Library」(英語)やCode Projectの「DirectUI」(英語)などで知ることができる。
XAMLでUIを構築しているWindowsストアアプリでは、データビューの[ClassName]で利用しているUIコントロールが分かる。
前述した「ヘルプ+使い方」アプリの調査では、この[ClassName]を見たのである。あるいは次の例では、ListViewコントロールの各ListViewItemコントロールの中にImageコントロールやTextBlockコントロールが入っていることが分かる(次の画像)。ただし、UIを持たないコントロール(レイアウト用のコントロールやデータテンプレートなど)は、Inspectツールでは表示されない。
ここでListViewコントロールのUIの仮想化の機能(既定で有効になっている)を確認してみよう。上の画像の状態から、ListViewコントロールを下までスクロールして、Inspectツールのリフレッシュボタンをクリックしてから、再びツリービューを展開する。すると次の画像のようになる。先ほどの画像では最末尾だった項目の後ろに、さらに9個の項目が増えている(逆に冒頭の8個の項目が消えている)。UIの仮想化によって、見えているエリア+αの範囲のListViewItemコントロールだけが実体化されているのである。
「ナレーター」*4が読み上げる文字列は、データビューの[Name]で分かる。
例えば、「フォト」アプリのGridViewItemコントロールを調べてみると、[Name]に画像ファイルの名前などが設定されている(次の画像)。「ナレーター」はこれを読み上げるのである。
ちなみに、GridViewItemコントロールやListViewItemコントロールの[Name]は、既定ではバインドされたデータのクラス名になってしまうので注意が必要だ(次の画像)。この問題を解決するには、バインドするデータのクラス(画像の例ではImageFileDataクラス)でToStringメソッドをオーバーライドして、そこで適切な文字列を返すようにするのが簡単である。
*4 「ナレーター」は画面を合成音声で読み上げる機能で、Win 8.xに標準で搭載されている。「ナレーター」の設定は、[PC設定の変更]の[簡単操作]−[ナレーター]で行う。
Windows SDKに含まれているInspectツールを使えば、WindowsストアアプリのUIを構成しているコントロールを調べることができる。また、ナレーターが読み上げる文字列も確認できる。
UIオートメーションやInspectツールについては、次のドキュメントも参照してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.