SignalRを使ったPowerPointリモコンです.
以下のような仕組みでスマートフォンのアプリからPC上のPowerPointを操作します.
メッセージを中継するSignalRサーバーです. ASP.NET Core 3.1です.
リモコンとなるスマホアプリです. Xamarin.Formsです.
- Xamarin.Forms 4.5 pre3
PowerPointを操作するPC側のレシーバーです. タスク常駐型のアプリです. WPF(.NET Core)です.
-.NET Core 3.1
このリポジトリをzipファイルとしてダウンロード,もしくはCloneする.
Visual Studioでプロジェクトを開きます.
Startup.cs内の以下の設定によって,クライアントからは{ホスト名}/SlideControllerというURLで接続することになります.
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("SignalR is working.");
});
endpoints.MapHub<SlideControllerHub>("/SlideController");
});Visual StudioからAzure App Serviceにデプロイします.
デプロイするときのプランはFreeを選んでおきましょう.
デプロイ先のURLを後でクライアント側から使用します.
Visual Studioでプロジェクトを開きます.
App.xaml.csを開き,以下の変数に{デプロイ先のURL}/SlideControllerを入れます.
例:https://slidecontrollersignalrhub_sample.azurewebsites.net/SlideController
private readonly string _signalRServerUrl = @"SignalRHubのURLをここに";ビルドします.
このアプリケーションはタスクトレイに常駐させるために,以下の2つのDLLを使用しています. このDLLのパスが環境によって異なる場合があり,そのときはビルドに失敗します.
- System.Drawing.Common
- System.Windows.Forms
このような場合は,以下の場所を探して各DLLの参照を追加してから,再びビルドしてください.
C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\{.NET Coreのバージョン}
アプリケーションを起動したらタスクトレイにアイコンが表示されるので,右クリックしてメニューからConnectを選択します.
以下のようにConnectedの通知が出たら接続成功です.
Xamarin.Forms製でプラットフォーム固有の機能などは使っていないので,Android,iOS,UWPのいずれでも動作するはずです.
MainPageViewModel.csを開いて,以下の変数に{デプロイ先のURL}/SlideControllerを入れます.
例:https://slidecontrollersignalrhub_sample.azurewebsites.net/SlideController
private readonly string _signalRServerUrl = @"SignalRHubのURLをここに";実機をつないでアプリケーションを配置します.
配置が終わったらアプリを起動して,「接続」ボタンを押す.
左上に「接続済」と表示されたら接続成功です.
WPF製のレシーバー,Xamarin.Formsアプリをそれぞれ起動してSignalRサーバーに接続します.
PowerPointを起動してお好きな資料を開きます.
PowerPointがアクティブ(フォーカスがあたっている状態)で,以下の操作が行えることを確認します.
- 停止/再開 : スライドショーの開始,停止
- 前 : 次のスライドへ.スライドショーが始まっている状態であること.
- 後 : 前のスライドへ.スライドショーが始まっている状態であること.
- Black out : BlackOutのOn/Off.スライドショーが始まっている状態であること.
ソースコードを見たり,使ってみたりするとわかると思いますが,サーバーからのメッセージに応じて「各キーが押されたことにしている」だけなので,PowerPointじゃないと使えない,というわけではなかったりします.
例えば,Youtubeなどの動画アプリだと動画を数秒送ったり戻したりといった操作になるので,こちらでも簡単なリモコンとして使えますね.これも以外と便利です.



