zoukankan      html  css  js  c++  java
  • hge source explor 0x9 Power & Random & Ini

    Power

      电源管理部分,会用到的参数为:

        // Power
        int                            nPowerStatus;
        HMODULE                        hKrnl32;
        GetSystemPowerStatusFunc       lpfnGetSystemPowerStatus;

    _InitPowerStatus()

      初始化电源信息:

    • LoadLibrary("kernel32.dll")
    • 获得函数GetSystemPowerStatus地址
    • 调用_UpdatePowerStatus
    void HGE_Impl::_InitPowerStatus()
    {
        hKrnl32 = LoadLibrary("kernel32.dll");
    
        if(hKrnl32 != NULL)
            lpfnGetSystemPowerStatus = (GetSystemPowerStatusFunc)GetProcAddress(hKrnl32, "GetSystemPowerStatus");
    
        _UpdatePowerStatus();
    }
    _InitPowerStatus

     _UpdatePowerStatus()

      获得电源信息。

    void HGE_Impl::_UpdatePowerStatus()
    {
        SYSTEM_POWER_STATUS ps;
    
        if(lpfnGetSystemPowerStatus != NULL && lpfnGetSystemPowerStatus(&ps))
        {
            if(ps.ACLineStatus == 1)
            {
                nPowerStatus = HGEPWR_AC;
            }
            else if(ps.BatteryFlag < 128)
            {
                nPowerStatus = ps.BatteryLifePercent;
            }
            else
            {
                nPowerStatus = HGEPWR_UNSUPPORTED;
            }
        }
        else
        {
            nPowerStatus = HGEPWR_UNSUPPORTED;
        }
    }
    _UpdatePowerStatus

     _DonePowerStatus()

      结束,释放动态链接库。

    void HGE_Impl::_DonePowerStatus()
    {
        if(hKrnl32 != NULL) FreeLibrary(hKrnl32);
    }
    _DonePowerStatus

    Random

       在这个模块中提供随机数,作为唯一的参数的 是随机数的种子。

    unsigned int g_seed=0;

     Random_Seed(int seed)

      设置随机数的种子。

    void CALL HGE_Impl::Random_Seed(int seed)
    {
        if(!seed) g_seed=timeGetTime();
        else g_seed=seed;
    }
    Random_Seed 

     Random_Int(int min, int max)

      线性同余法产生一个整型随机数,范围为(min,max)。

    int CALL HGE_Impl::Random_Int(int min, int max)
    {
        g_seed=214013*g_seed+2531011;
        return min+(g_seed ^ g_seed>>15)%(max-min+1);
    }
    Random_Int 

     Random_Float(float min, float max)

      产生一个浮点型随机数,范围为(min,max)。

    float CALL HGE_Impl::Random_Float(float min, float max)
    {
        g_seed=214013*g_seed+2531011;
        //return min+g_seed*(1.0f/4294967295.0f)*(max-min);
        return min+(g_seed>>16)*(1.0f/65535.0f)*(max-min);
    }
    Random_Float

    Ini

       在这个部分中,从指定的Ini文件中读取、写入数据,所以需要一ini文件。

        char                szIniFile[_MAX_PATH];

    set(const char* section,const char* name,type value);

      写入不同类型的参数。

    void CALL HGE_Impl::Ini_SetInt(const char *section, const char *name, int value)
    {
        char buf[256];
    
        if(szIniFile[0]) {
            sprintf(buf,"%d",value);
            WritePrivateProfileString(section, name, buf, szIniFile);
        }
    }
    
    void CALL HGE_Impl::Ini_SetFloat(const char *section, const char *name, float value)
    {
        char buf[256];
    
        if(szIniFile[0]) {
            sprintf(buf,"%f",value);
            WritePrivateProfileString(section, name, buf, szIniFile);
        }
    }
    
    void CALL HGE_Impl::Ini_SetString(const char *section, const char *name, const char *value)
    {
        if(szIniFile[0]) WritePrivateProfileString(section, name, value, szIniFile);
    }
    Setter

    get(const char* section,const char* name, type value);

      读取数据。

    int CALL HGE_Impl::Ini_GetInt(const char *section, const char *name, int def_val)
    {
        char buf[256];
    
        if(szIniFile[0]) {
            if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
            { return atoi(buf); }
            else { return def_val; }
        }
        return def_val;
    }
    
    
    float CALL HGE_Impl::Ini_GetFloat(const char *section, const char *name, float def_val)
    {
        char buf[256];
    
        if(szIniFile[0]) {
            if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
            { return (float)atof(buf); }
            else { return def_val; }
        }
        return def_val;
    }
    
    char* CALL HGE_Impl::Ini_GetString(const char *section, const char *name, const char *def_val)
    {
        if(szIniFile[0]) GetPrivateProfileString(section, name, def_val, szIniString, sizeof(szIniString), szIniFile);
        else strcpy(szIniString, def_val);
        return szIniString;
    }
    Getter

      接下来就是图形了!

  • 相关阅读:
    暂存。2
    暂存。
    dom兼容性问题3 元素操作
    一个查看Access数据库密码的工具
    解除IIS配置节锁定
    解决cef中title不现实tooltip的问题
    创建.symlnk文件
    查询orcale运行的SQL语句记录
    跨域http头
    C#抓取天气数据
  • 原文地址:https://www.cnblogs.com/yoru/p/5515570.html
Copyright © 2011-2022 走看看