7

Windows 8 シミュレーターを起動する小さな .NET コンソール プログラムを作成しました。非常に簡単です:

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 はまばらで、多くの開発者がこれを使用しているようには見えません。

4

1 に答える 1

1

フレームワークよりも優れたフレームワークを実際に見つけましたSmartDeviceC:\Program Files (x86)\Microsoft XDE\8.0フォルダー内にはMicrosoft.XDE、Windows 8 シミュレーターのラッパー/スキンを強化するのに役立つ 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();
}
于 2013-11-07T17:16:16.423 に答える