NETCF运行平台检测

 
该文章参考了 https://blogs.msdn.com/netcfteam/archive/2006/09/15/756755.aspx,上面详细介绍了如何在程序中检测NETCF的各种运行平台,此处对于其中的代码片段进行了整理。
 
测试过程中发现文章中提供的代码存在兼容性问题,这源于一次偶然性的测试,当时用的是HP和SIEMENS的PDA进行测试,发现SIEMENS中当获取OEM信息时抛出异常,尝试性的进行了修改,居然解决了问题。具体的注释在代码中有详细的说明。
 
鉴于有些PDA程序被要求在PC上面兼容运行,这也是客户的一个需求。在此对文章中的代码进行了改进。文章中的代码原本被设计为在NETCF中运行,且使用了PINVOKE调用PDA中的相关底层函数,此代码如果在PC中运行,将产生不可预料的结果。由于当在PC上运行时,实际上是由.NET Framework的完整版本在执行代码,已经失去了对目标平台检测的意义。所以为了防止不可预料的结果出现,对相关代码做了修改。这一功能的实现是通过一个新添加的方法IsWinCE来实现的。该方法也可以向调用方提供必要的信息,作为检测实际执行代码的Framework的方法,具体参见源代码。
 
最终版本提供的检测功能:
  • IsWinCE ()
  • IsEmulator ()
  • IsSmartPhone ()
  • IsPockPC ()
  • IsTouchScreen ()
 
源码如下:
using  System;
using  System.IO;
using  Microsoft.Win32;
using  System.Runtime.InteropServices;
using  System.Text;

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

        
const int MAX_PATH = 260;
        [DllImport(
"Coredll.dll")]
        
static extern int SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, int fCreate);

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


        
public static string GetOemInfo()
        
{
            
//10/26/2006 wangyun Change from 50 to 100, as it doesn't work on "FUJITSU SIEMENS COMPUTERS Pocket LOOX"
            StringBuilder oemInfo = new StringBuilder(100);
            
if (SystemParametersInfo4Strings((uint)SystemParametersInfoActions.SPI_GETOEMINFO,
                    (
uint)oemInfo.Capacity, oemInfo, 0== 0)
                
throw new Exception("Error getting OEM info.");
            
return oemInfo.ToString();
        }


        
public static string GetPlatformType()
        
{
            
//10/26/2006 wangyun Change from 50 to 100 to avoid the possible bug as above
            StringBuilder platformType = new StringBuilder(100);
            
if (SystemParametersInfo4Strings((uint)SystemParametersInfoActions.SPI_GETPLATFORMTYPE,
                (
uint)platformType.Capacity, platformType, 0== 0)
                
throw new Exception("Error getting platform type.");
            
return platformType.ToString();
        }


        
public enum SpecialFolders : int
        
{
            CSIDL_WINDOWS 
= 0x0024,
        }


        
public static string GetSpecialFolder(SpecialFolders specialFolder)
        
{
            StringBuilder path 
= new StringBuilder(MAX_PATH);
            
if (SHGetSpecialFolderPath(IntPtr.Zero, path, (int)specialFolder, 0== 0)
                
throw new Exception("Error getting Windows path.");
            
return path.ToString();
        }

    }


    
public class PlatformDetection
    
{
        
private const string MicrosoftEmulatorOemValue = "Microsoft DeviceEmulator";

        
//10/26/2006 wangyun To effect compatibility between PC and PDA devices
        public static bool IsWinCE()
        
{
            
return System.Environment.OSVersion.Platform == PlatformID.WinCE;
        }


        
public static bool IsEmulator()
        
{
            
if (IsWinCE())
                
return PInvoke.GetOemInfo() == MicrosoftEmulatorOemValue;
            
else
                
return false;
        }


        
public static bool IsSmartphone()
        
{
            
if (IsWinCE())
                
return PInvoke.GetPlatformType() == "SmartPhone";
            
else
                
return false;
        }


        
public static bool IsPocketPC()
        
{
            
if (IsWinCE())
                
return PInvoke.GetPlatformType() == "PocketPC";
            
else
                
return false;
        }


        
public static bool IsTouchScreen()
        
{
            
if (IsWinCE())
            
{
                
string driverFileName = Registry.GetValue(@"HKEY_LOCAL_MACHINEHardwareDeviceMapTouch",
                    
"DriverName""touch.dll").ToString();
                
string windowsFolder = PInvoke.GetSpecialFolder(PInvoke.SpecialFolders.CSIDL_WINDOWS);
                
string driverPath = Path.Combine(windowsFolder, driverFileName);
                
bool driverExists = File.Exists(driverPath);

                
return
                    driverExists 
&&
                    
// Windows Mobile 5.0 Smartphone emulator and earlier has a driver, but no touch screen.
                    !(IsSmartphone() && IsEmulator() && Environment.OSVersion.Version.Major < 6);
            }

            
else
                
return false;
        }

    }

}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: wince mcgstpc_net35_setup 是一个 Windows CE 平台上的安装程序,用于安装 Microsoft .NET Compact Framework 3.5 (NETCF 3.5) 运行时环境。 Windows CE 是微软为嵌入式系统开发的一种操作系统,它主要用于一些资源有限的设备,如手持设备、嵌入式设备等。而 .NET Compact Framework(简称。NET CF)则是微软为嵌入式系统开发的一套小型的.NET运行时库。 NETCF 3.5 是在之前版本的基础上进行了升级,提供了一些新的功能和改进,使开发人员能够更轻松地创建可在 Windows CE 平台运行的应用程序。它支持 Windows CE 5.0、6.0 和 7.0 版本,并且兼容性良好。 安装 mcgstpc_net35_setup 的目的是为了在 Windows CE 设备上安装 NETCF 3.5 运行时环境,以便运行基于.NET框架的应用程序。安装程序会将.NETCF 3.5 的核心文件和库文件拷贝到设备中的指定目录,使得设备能够正确解析和执行由.NET CF 编译的应用程序。 安装.NET CF 3.5 不仅可以提供更好的应用程序兼容性,还可以让开发人员能够使用.NET平台上更丰富的功能和特性来开发应用程序。而且.NET CF 还提供了一些用于简化开发的工具和类库,使开发人员能够更快速、高效地开发出质量更高的应用。 总的来说,wince mcgstpc_net35_setup 是一个用于安装 NETCF 3.5 运行时环境的安装程序, 它可以为 Windows CE 设备提供更好的应用程序兼容性和更丰富的开发功能,使得开发人员能够更方便地创建适用于嵌入式系统的.NET应用程序。 ### 回答2: wince mcgstpc_net35_setup 是一个 Windows CE 操作系统上的安装程序。这个安装程序主要是用于安装 MCSTPC 所需的 .NET Compact Framework 3.5 组件。 在 Windows CE 操作系统上,.NET Compact Framework 是用于开发和运行基于.NET技术的应用程序所必需的一个组件。MCSTPC 是一个应用程序,它可能与 .NET Compact Framework 3.5 兼容。 安装过程中,wince mcgstpc_net35_setup 首先会检查系统是否满足安装要求,如系统的硬件配置和操作系统版本等。如果系统符合要求,安装程序会将.NET Compact Framework 3.5 组件提取到合适的目录,并进行必要的注册,以供 MCSTPC 应用程序调用。 通过安装 wince mcgstpc_net35_setup,用户可以确保系统具备运行 MCSTPC 应用程序所需的环境。当用户运行 MCSTPC 时,其所需的 .NET Compact Framework 3.5 组件会被自动加载和使用。 总之,wince mcgstpc_net35_setup 是一个用于安装 .NET Compact Framework 3.5 组件的 Windows CE 安装程序,其目的是为了提供 MCSTPC 应用程序所需的必备环境。 ### 回答3: wince mcgstpc_net35_setup是指Windows CE操作系统中的一个安装模块,用于在设备上安装和配置Microsoft .NET Compact Framework版本3.5。 Microsoft .NET Compact Framework是一种基于.NET技术的轻量级的应用程序开发框架,旨在在嵌入式和移动设备上开发和运行应用程序。它提供了一系列的类库、工具和运行时环境,使开发人员能够在Windows CE设备上构建功能强大的应用程序。 通过安装wince mcgstpc_net35_setup,用户可以将设备升级到支持.NET Compact Framework 3.5的版本。这将使设备能够运行基于.NET技术开发的应用程序,并利用.NET Compact Framework的功能和特性。 安装和配置wince mcgstpc_net35_setup的过程通常较为简单,用户只需执行一个命令或运行一个安装程序,然后跟随提示完成安装过程。安装完成后,设备将具备.NET Compact Framework 3.5的运行环境,并可以运行相应的应用程序。用户还可以根据需要对.NET Compact Framework进行一些配置,例如选择不同的语言支持、调整内存分配等。 总的来说,wince mcgstpc_net35_setup是用于在Windows CE设备上安装和配置.NET Compact Framework 3.5的工具。通过将设备升级到支持.NET Compact Framework 3.5,用户可以运行更多的应用程序,并享受.NET技术带来的便利和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值