マイク、ピクチャライブラリ、Webカメラへのアクセス許可の設定

マイク、ピクチャライブラリ、Webカメラへのアクセス許可の設定

今回のサンプルは、ピクチャライブラリにアクセスしますので、「画像ライブラリ」へのアクセス許可が必要になります。ソリューションエクスプローラー内にpackage.appxmanifestというファイルがありますので、このファイルをダブルクリックします。「機能」タブをクリックして、表示される画面の「機能:」にある、「マイク」、「画像ライブラリ」、「Webカメラ」にチェックを付けます(図3)。

図3:package.appxmanifestファイルを開き「マイク」、「画像ライブラリ」、「Webカメラ」にチェックを付ける(クリックで拡大)

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。

ロジックコードを記述する

リスト2 (MainWindow.xaml.vb)

Option Strict On

PopupMenuであるコンテキストメニューを表示させるのに必要なクラスの含まれる、Windows.UI.Popups名前空間をインポートします。

Imports Windows.UI.Popups

写真、オーディオの録音とビデオのキャプチャを提供するクラスの含まれる、Windows.Media.Capture名前空間をインポートします。

Imports Windows.Media.Capture

ファイル、フォルダー、およびアプリケーションの設定を管理するクラスの含まれる、Windows.Storage名前空間をインポートします。

Imports Windows.Storage

Public NotInheritable Class MainPage
  Inherits Page

写真、オーディオの録音やビデオをキャプチャするMediaCaptureクラス型のメンバ変数、myMediaCaptureを宣言します。

Dim myMediaCapture As MediaCapture

インデックスでアクセスできる読み取り専用のファイルのコレクションを表すインターフェースである、IReadOnlyList(Of IStorageFile)型のメンバ変数、myPictureFilesを宣言します。

  Dim myPictureFiles As IReadOnlyList(Of IStorageFile)

LayoutRootという名前のGrid上にポインターがあった時、右タップの入力刺激があった時の処理

2次元空間でのXとY座標のペアを表すPoint構造体を、右タップされた時点のXとY座標で初期化します。-540は位置合わせのための数値です。

LayoutRootの描画時の幅と高さで初期化された、新しいSizeのインスタンスmySizeオブジェクトを作成します。Size構造体はオブジェクトの幅と高さを表します。

四角形の幅、高さ、および原点を表すRect構造体を、Point構造体のオブジェクトmyPointと、Size構造体のオブジェクトmySizeで初期化した、新しいRectのインスタンス、myRectオブジェクトを作成します。

ポップアップメニューを表すPopupMenuクラスのインスタンス、myPopupオブジェクトを作成します。

Command.Addメソッドで、PopupMenuに項目名と、その項目をタップした際のコマンドを追加します。UICommandクラスは、コンテキストメニュー内のコマンドを表します。PopupMenuに「Webカメラ」、「画像一覧」、「全クリア」の項目を追加し、それらに対するコマンドを追加します。

ShowForSelectionAsyncメソッドで、指定された選択項目を基準とする適切な位置に、コンテキストメニューを表示します。この場合はLayoutRoot内で右タップがされた位置の左側(Placement.Left)にコンテキストメニューが表示されます。Placement列挙体については、下記のURLを参考にしてください。
→ Placement enumeration (Windows)

非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。

  Private Async Sub LayoutRoot_RightTapped(sender As Object, e As RightTappedRoutedEventArgs) Handles LayoutRoot.RightTapped
    Dim myPoint As Point = New Point(e.GetPosition(LayoutRoot).X, e.GetPosition(LayoutRoot).Y - 540)
    Dim mySize As New Size(LayoutRoot.ActualWidth, LayoutRoot.ActualHeight)
    Dim myRect As New Rect(myPoint, mySize)
 
    Dim myPopup As New PopupMenu

    myPopup.Commands.Add(New UICommand("Web カメラ", Sub(command)
                                                          ShowWebCamera()
                                                        End Sub))
    myPopup.Commands.Add(New UICommand("画像一覧", Sub(command)
                                                          ShowImage()
                                                        End Sub))
    myPopup.Commands.Add(New UICommand("全クリア", Sub(command)
                                                          AllClear()
                                                        End Sub))
    Await myPopup.ShowForSelectionAsync(myRect, Placement.Left)
  End Sub

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30