2013-10-24 5 views
7

私は、Windows 8 Simulatorを起動する小さな.NETコンソールプログラムを作成しました。非常に簡単:Microsoft.Smartdevice.ConnectivityとWindows Phone 8、ネイティブアプリケーションを起動し、入力を送信しますか?

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を使って自分のAppsを起動することができますが、実際にやりたいことはシミュレータ(メールアプリ)に付属のビルトインアプリを実行することです。 SmartDevice.Connectivityライブラリを使用して接触を送信したり、GetInstalledApplications()メソッドに表示されない「非表示」アプリを起動できますか? APIは疎であり、これを使用している大量の開発者のようには見えません。

答えて

1

私は実際にSmartDeviceフレームワークよりも優れたフレームワークを見つけました。 C:\Program Files (x86)\Microsoft XDE\8.0フォルダの中には、Windows 8シミュレータのラッパー/スキンの電源に役立つMicrosoft.XDE DLLがあり、シミュレータとの対話を可能にする管理ライブラリです。サンプルコード:

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(); 
} 
関連する問題