2013-10-24 22 views
7

Windows 8 Simulator'u çalıştıracak küçük bir .NET Console programı yazdım. Çok basit: Oldukça basit. Ancak, şimdi yapmak istediğim, programla cihazla etkileşimde bulunuyor. IDevice.installApplication'ı kullanarak kendi Uygulamalarımı başlatabildiğimi biliyorum, ancak gerçekten yapmak istediklerim simülatörle (posta uygulaması) gelen yerleşik bir uygulamayı çalıştırmaktır. Dokunmalarını göndermek için SmartDevice.Connectivity libs'ları kullanabilir veya GetInstalledApplications() yönteminde görünmeyen 'gizli' uygulamaları başlatabilir miyim? API seyrekdir ve bir ton geliştiricinin bunu kullanması gibi görünmemektedir.Microsoft.Smartdevice.Connectivity ve Windows Phone 8, yerel uygulamaları başlatmak, giriş göndermek?

cevap

1

Aslında, SmartDevice çerçevesinden daha iyi bir çerçeve buldum. C:\Program Files (x86)\Microsoft XDE\8.0 klasöründe, Windows 8 simülatör sarıcı/cilde güç sağlayan Microsoft.XDE DLL'lerini bulabilir ve simülatörle etkileşime girmenizi sağlayan kütüphaneleri yönetebilirsiniz. Örnek kod:

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