首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft.Smartdevice.Connectivity和Windows 8,启动本地应用程序,发送输入?

Microsoft.Smartdevice.Connectivity和Windows 8,启动本地应用程序,发送输入?
EN

Stack Overflow用户
提问于 2013-10-24 15:10:38
回答 1查看 2.4K关注 0票数 7

我编写了一个小型.NET控制台程序,它将启动Windows8Simator。非常直截了当:

代码语言:javascript
复制
using Microsoft.SmartDevice.Connectivity;
using Microsoft.SmartDevice.Connectivity.Interface;
using Microsoft.SmartDevice.MultiTargeting.Connectivity;

MultiTargetingConnectivity connectivity = new MultiTargetingConnectivity(CultureInfo.CurrentUICulture.LCID);
var devices = connectivity.GetConnectableDevices();
ConnectableDevice connectableDevice = devices[2];
Console.WriteLine("Found Connectable Device \'" + connectableDevice.Name + "\' for Device id {" + connectableDevice.Id + "}.");

相当直截了当。但是,我现在想做的是以编程方式与设备交互。我知道我可以通过使用iDevice.installApplication发布自己的应用程序,但我真正想做的是运行一个内置的应用程序,它附带了仿真器(邮件应用程序)。我可以使用SmartDevice.Connectivity库发送触摸,或者启动GetInstalledApplications()方法中没有显示的“隐藏”应用程序吗?API是稀疏的,看起来并不像很多开发人员正在使用它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 17:16:16

实际上,我发现了一个比SmartDevice框架更好的框架。在C:\Program Files (x86)\Microsoft XDE\8.0文件夹中,您可以找到Microsoft.XDE DLL,它帮助为Windows8模拟器包装/皮肤提供动力,并且是允许您与模拟器交互的托管库。样本代码:

代码语言:javascript
复制
private static void BootViaXdeLibs()
{
    var factory = new Microsoft.Xde.Wmi.XdeWmiFactory();
    Console.WriteLine("Polling for virtual machines");

    var virtualMachine = factory.GetAllXdeVirtualMachines(SettingsOptions.None)[2];
    Console.WriteLine("Found machine {0}", virtualMachine.Name);

    if (virtualMachine.EnabledState != VirtualMachineEnabledState.Disabled)
    {
        Console.WriteLine("Virtual Machine {0} is already running. Shutting down. ", virtualMachine.Name);
        virtualMachine.Stop();
        while (virtualMachine.EnabledState != VirtualMachineEnabledState.Disabled)
        {
            Thread.Sleep(1000);
        }
    }

    Console.WriteLine("Starting {0}", virtualMachine.Name);

    virtualMachine.Start();
    while (virtualMachine.EnabledState == VirtualMachineEnabledState.Starting)
    {
        Thread.Sleep(1000);
    }

    Console.WriteLine("Sleeping before image capture to give boot time");
    Thread.Sleep(30000);

    //Click on the screen
    virtualMachine.SendMouseEvent(new MouseEventArgs(MouseButtons.Left, 1, 295, 260, 0));
    Thread.Sleep(100);
    virtualMachine.SendMouseEvent(new MouseEventArgs(MouseButtons.None, 0, 295, 260, 0));
    Thread.Sleep(1000);

    Console.WriteLine("Saving screenshot");

    //Capture Screen
    var res = virtualMachine.GetCurrentResolution();
    var image = virtualMachine.GetScreenShot(0, 0, res.Width, res.Height);
    image.Save("C:\\image.png", ImageFormat.Png);

    virtualMachine.Stop();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19569770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档