判断Mobile程序是否运行于真机之上

本文提供了一种检测应用程序是否运行在真机还是模拟器上的方法。通过调用SystemParametersInfo函数获取设备信息,并判断返回值来确定。提供了C++和C#两种语言的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 
c++版本:
 
BOOL TApi::isRunOnDevice()
{
    TCHAR wszMachineName[128];
    SystemParametersInfo(SPI_GETOEMINFO, sizeof(wszMachineName),&wszMachineName, 0);
    if(_tcscmp(wszMachineName,TEXT("Microsoft DeviceEmulator"))==0)
    {
        //运行在真机上
        return FALSE;

    }

    return TRUE;
}
 
C#版本:
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"));
        }
    }
}

 

03-14
### 关于“端”的含义解析 在技术领域,“端”通常可以指代多种概念,具体取决于上下文环境。以下是几种常见的解释: #### 1. **网络端口** 在网络通信中,“端”常用来描述网络协议中的端口号。例如,在TCP/IP模型中,端口号用于区分不同的应用程序和服务。HTTP默认使用80端口,而HTTPS则使用443端口[^2]。 #### 2. **客户端(Client End)** 在引用的内容中提到的C/S模式(客户端/服务器模式),其中“端”特指客户端部分。在这种架构下,客户端负责向服务端发起请求并处理返回的数据。例如,手机应用通过API接口与后端交互,获取JSON或XML格式的数据[^1]。 #### 3. **移动端(Mobile End)** 随着移动互联网的发展,“端”也经常被用来表示特定设备上的运行环境。比如,当提及768px以下屏幕宽度时,一般认为这是针对移动端优化的设计标准[^3]。此外,检测用户代理字符串(UA)也是识别是否为移动设备的一种方式[^5]。 #### 4. **开发视角下的‘端’** 从开发角度来看,“端”还可以泛指某个平台或者框架所支持的应用程序入口。例如,在进行真机调试过程中涉及到如何让手机访问本地开发服务器等内容说明了不同阶段对于同一项目可能存在多个版本适配需求——既有面向桌面用户的Web界面也有专门为智能手机设计的小屏体验版;另外还包括像缓存管理这样的后台逻辑实现细节来提升整体性能表现[^4]。 综上所述,“端”可以根据实际应用场景分别理解成物理意义上的连接点(如端口)、软件层面的操作主体之一方(即客户终端)或者是专门服务于某一类硬件规格群体的产品形态(诸如移动站点)。 ```java @RequestMapping("") public ModelAndView test(HttpServletRequest request) { ModelAndView mv = new ModelAndView(); System.out.println("是否手机浏览器:" + isMoblieBrowser(request)); if (isMoblieBrowser(request)) { mv.setViewName("mobile"); } else { mv.setViewName("pc"); } return mv; } ``` 上述代码片段展示了基于请求头信息判断当前访问来源属于哪种类型的浏览行为,并据此决定渲染哪个模板文件给最终用户呈现相应布局样式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值