Podium:一种用于控制PowerPoint演示的移动工具

Podium是一种创新的演示控制工具,它由两部分组成:一部分是PowerPoint 2010的插件,另一部分是运行在Windows Phone 7设备上的应用程序。当用户开始演示时,插件会向手机发送推送通知,告知演示已准备就绪。一旦演示开始,插件会将每张幻灯片捕获为图片,并通过HTTP推送通知发送到手机上。如果手机上的应用正在运行,它将调用PowerPoint中的自托管WCF服务来获取幻灯片图片。用户可以通过在屏幕上轻触或滑动来发送消息,从而控制PowerPoint跳转到下一张或上一张幻灯片。

PowerPoint 2010 VSTO插件开发

创建一个默认的PowerPoint 2010插件非常简单。VSTO 2010是Visual Studio 2010的一部分。首先,需要“检测”是否有新的演示文稿被打开。这可以通过监听PresentationOpen事件来实现。一旦收到这个事件,就会发送一个新的推送通知。接下来,需要监听SlideShowNextSlide和SlideShowBegin事件。对于这些事件,需要将新的幻灯片捕获为JPG图片。这些事件会传递一个SlideShowWindow的副本,可以使用它来将幻灯片复制到剪贴板。

window.View.Slide.Copy();

一旦幻灯片在剪贴板中,就可以很容易地将其保存到文件中。

var data = Clipboard.GetDataObject(); if (data == null) return; if (!data.GetDataPresent(DataFormats.Bitmap, true)) return; Image image = (Image)data.GetData(DataFormats.Bitmap, true); image.Save(CachePathFromGuid(guid), ImageFormat.Jpeg);

还需要为每张图片创建一个唯一的ID(使用GUID),并将其发送到设备上。

自托管WCF服务

PowerPoint插件托管了一个非常基础的WCF服务。这个服务包括注册和注销操作,以及获取幻灯片、上一张幻灯片和下一张幻灯片的操作。为了使自托管WCF服务工作,应用程序需要以管理员身份运行。

[ServiceContract] public interface IRegistrationService { [OperationContract, WebGet] void Register(string uri); [OperationContract, WebGet] void Unregister(string uri); [OperationContract, WebGet] byte[] GetSlide(Guid guid); [OperationContract, WebGet] void PreviousSlide(); [OperationContract, WebGet] void NextSlide(); }

注册/注销用于推送通知,而获取幻灯片、上一张幻灯片和下一张幻灯片则用于控制或与PowerPoint交互。

Windows Phone 7是微软开发的移动操作系统,是Windows Mobile平台的继任者。它的目标是通过重新设计用户界面、将操作系统与其他服务集成以及严格控制其运行的硬件,创造一个引人入胜的用户体验。Windows Phone 7使用Silverlight作为其编程模型,为WPF/Silverlight开发者提供了大量新的机会。在开始之前,需要下载Windows Phone开发者工具。安装完成后,可以创建一个新的Windows Phone应用程序。

这个应用程序的用户界面非常简单,只有一个屏幕等待新的幻灯片。如果新的幻灯片可用,就下载并显示它。这个应用程序只支持横向方向(这在特定场景中更有意义)。要将应用程序限制为仅支持特定方向,需要设置页面的SupportedOrientations和Orientation属性都为“Landscape”。

<phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton IconUri="/Assets/Icons/LeftArrow.png" Text="Previous" x:Name="PreviousButton" Click="PreviousButton_Click" /> <shell:ApplicationBarIconButton IconUri="/Assets/Icons/RightArrow.png" Text="Next" x:Name="NextButton" Click="NextButton_Click" /> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar>

推送通知的工作原理如下:手机打开到云中通知服务的通道,一旦通道打开成功,手机就将通道URI发送到自托管的WCF服务。完成这些后,就可以开始了!现在PowerPoint可以使用这个提供的URI向手机发送消息。

notifier = new PushNotifier("PodiumChannel", "PodiumService"); notifier.Subscribed += new EventHandler(notifier_SubscribeToService); notifier.HttpNotificationReceived += new EventHandler<Microsoft.Phone.Notification.HttpNotificationEventArgs>(notifier_HttpNotificationReceived); notifier.Open();

在客户端(PowerPoint插件)中,有一个NotificationSenderUtility类负责发送推送和RAW HTTP通知!这里有一个推送消息的示例:

var subscribers = RegistrationService.GetSubscribers(); notifier.SendToastNotification(subscribers, "Podium", "这是一个推送消息", OnMessageSent);

手势识别在历史上一直很难实现!但现在不是这样了……使用了Silverlight for Windows Phone Toolkit提供的GestureService。

<toolkit:GestureService.GestureListener> <toolkit:GestureListener Flick="GestureListener_Flick" DoubleTap="GestureListener_DoubleTap" Tap="GestureListener_Tap" /> </toolkit:GestureService.GestureListener>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485