2013-10-24 13 views
7

Ich habe ein kleines .NET Console-Programm geschrieben, das den Windows 8 Simulator starten wird. Sehr einfach:Microsoft.Smartdevice.Connectivity und Windows Phone 8, native Anwendungen starten, Eingaben senden?

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 + "}."); 

Ziemlich einfach. Was ich jetzt jedoch machen möchte, ist die programmatische Interaktion mit dem Gerät. Ich weiß, dass ich meine eigenen Apps mithilfe von iDevice.installApplication starten kann, aber ich möchte eine integrierte App ausführen, die mit dem Simulator (der Mail-App) geliefert wird. Kann ich die SmartDevice.Connectivity Libs verwenden, um Berührungen zu senden oder "versteckte" Apps zu starten, die nicht in der GetInstalledApplications()-Methode angezeigt werden? Die API ist spärlich und scheint nicht so zu sein, dass eine Menge Entwickler das verwenden.

Antwort

1

Ich habe tatsächlich ein besseres Framework als das SmartDevice Framework gefunden. Im Ordner C:\Program Files (x86)\Microsoft XDE\8.0 finden Sie die Microsoft.XDE DLLs, die helfen, den Windows 8-Simulator-Wrapper/Skin zu versorgen, und sind verwaltete Bibliotheken, mit denen Sie mit dem Simulator interagieren können. Beispielcode:

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(); 
}