如题...如何判断程序当前运行在Windows CE下还是Windows Mobile下?
程序是 C# + .NET CF 2.0的
mobile 的版本好应该是5.1,wince 的是5.0,你试试看
6.0以前,使用SystemParametersInfo(SPI_GETPLATFORMTYPE...);
6.0开始,使用SystemParametersInfo(SPI_GETPROJECTNAME...)。
http://msdn.microsoft.com/en-us/library/ms229660.aspx
http://www.christec.co.nz/blog/archives/77
public class PlatformDetector
{
[DllImport("coredll.dll")]
private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni);
private static uint SPI_GETPLATFORMTYPE = 257;
public static Platform GetPlatform()
{
Platform plat = Platform.Unknown;
switch (System.Environment.OSVersion.Platform)
{
case PlatformID.Win32NT:
plat = Platform.Win32NT;
break;
case PlatformID.Win32S:
plat = Platform.Win32S;
break;
case PlatformID.Win32Windows:
plat = Platform.Win32Windows;
break;
case PlatformID.WinCE:
plat = CheckWinCEPlatform();
break;
}
return plat;
}
static Platform CheckWinCEPlatform()
{
Platform plat = Platform.WindowsCE;
StringBuilder strbuild = new StringBuilder(200);
SystemParametersInfo(SPI_GETPLATFORMTYPE, 200, strbuild, 0);
string str = strbuild.ToString();
switch (str)
{
case "PocketPC":
plat = Platform.PocketPC;
break;
case "SmartPhone":
// Note that the strbuild parameter from the
// PInvoke returns "SmartPhone" with an
// upper case P. The correct casing is
// "Smartphone" with a lower case p.
plat = Platform.Smartphone;
break;
}
return plat;
}
}
public enum Platform
{
PocketPC, WindowsCE, Smartphone, Win32NT, Win32S, Win32Windows, Unknown
}
引用: 引用 1 楼 ultrapro 的回复:
mobile 的版本好应该是5.1,wince 的是5.0,你试试看
_WIN32_WCE 这个宏对lz也许有用,对照版本号
2楼的方法简单 呵呵, 就是不太稳 呵呵
5楼的方法...我试了...返回的可能是OEM的信息...晕...那就没发判断了...
引用: 引用 7 楼 dfpgb 的回复:
2楼的方法简单 呵呵, 就是不太稳 呵呵
5楼的方法...我试了...返回的可能是OEM的信息...晕...那就没发判断了...
这可能取决于OEM是否返回了正确的信息。或许你的device的OEM厂商没有实现这个功能,或者说实现的不对。
引用: 引用 11 楼 codewarrior 的回复:
试了SPI_GETPROJECTNAME吗?
- 错误 1 当前上下文中不存在名称“SPI_GETPROJECTNAME”
我建立的项目是WINCE5.0的...所以SPI_GETPLATFORMTYPE就定义了?
引用: 引用 11 楼 codewarrior 的回复:
试了SPI_GETPROJECTNAME吗?
晕...我仔细看了看:SPI_GETPROJECTNAME?? 得到项目名字~~~?
引用: 引用 13 楼 dfpgb 的回复:
引用 11 楼 codewarrior 的回复:
试了SPI_GETPROJECTNAME吗?
晕...我仔细看了看:SPI_GETPROJECTNAME?? 得到项目名字~~~?
这是因为windows embeded 6.0中,可以使用CEBase和SmartFon两种基础项目类型。