2010-06-25 55 views

回答

7

This article告訴你如何,間接的影響。它展示瞭如何創建一個實用的方法IsEmulator。如果您一般關心平臺檢測,您可能也對follow-up感興趣。

從文章:

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

如果您使用的OpenNETCF Smart Device Framework,可以測試OpenNETCF.WindowsCE.DeviceManagement.OemInfo屬性,看它是否等於「微軟DeviceEmulator」。這就是我如何檢測到我在仿真器下運行,不應該與特定的硬件(如條形碼閱讀器)進行交互。