2010-06-25 15 views

Odpowiedz

7

This article mówi, jak pośrednio. Pokazuje, jak stworzyć użyteczną metodę, która rozwiązuje problem. Możesz także zainteresować się numerem follow-up, jeśli chodzi ogólnie o wykrywanie platformy.

Z artykułu:

using System; 
using System.IO; 
using System.Windows.Forms; 
using Microsoft.Win32; 
using System.Runtime.InteropServices; 
using System.Text; 

namespace PlatformDetection 
{ 
    internal partial class PInvoke 
    { 
     [DllImport("Coredll.dll", EntryPoint = "SystemParametersInfoW", CharSet = CharSet.Unicode)] 
     static extern int SystemParametersInfo4Strings(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni); 

     public enum SystemParametersInfoActions : uint 
     { 
      SPI_GETPLATFORMTYPE = 257, // this is used elsewhere for Smartphone/PocketPC detection 
      SPI_GETOEMINFO = 258, 
     } 

     public static string GetOemInfo() 
     { 
      StringBuilder oemInfo = new StringBuilder(50); 
      if (SystemParametersInfo4Strings((uint)SystemParametersInfoActions.SPI_GETOEMINFO, 
       (uint)oemInfo.Capacity, oemInfo, 0) == 0) 
       throw new Exception("Error getting OEM info."); 
      return oemInfo.ToString(); 
     } 

    } 
    internal partial class PlatformDetection 
    { 
     private const string MicrosoftEmulatorOemValue = "Microsoft DeviceEmulator"; 
     public static bool IsEmulator() 
     { 
      return PInvoke.GetOemInfo() == MicrosoftEmulatorOemValue; 
     } 
    } 
    class EmulatorProgram 
    { 
     static void Main(string[] args) 
     { 
      MessageBox.Show("Emulator: " + (PlatformDetection.IsEmulator() ? "Yes" : "No")); 
     } 
    } 
} 
4

Jeśli używasz OpenNETCF Smart Device Framework, można przetestować właściwość OpenNETCF.WindowsCE.DeviceManagement.OemInfo aby sprawdzić, czy jest on równy „Microsoft DeviceEmulator”. W ten sposób wykrywam, że działam pod emulatorem i nie powinien wchodzić w interakcję z konkretnym sprzętem, takim jak czytnik kodów kreskowych.

Powiązane problemy