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

      接下来就是图形了!

  • 相关阅读:
    asp.net正则匹配嵌套Html标签
    sql语句插入百万测试数据
    js判断网页是真静态还是伪静态的方法
    sql自动创建表并复制数据
    百度地图API-搜索地址、定位、点击获取经纬度并标注
    kindeditor自定义插件插入视频代码
    mongo 取随机100条数据写入Excel
    python实现RSA加密和签名以及分段加解密的方案
    装饰器写法
    大转盘抽奖概率 固定每个区域的中奖几率
  • 原文地址:https://www.cnblogs.com/yoru/p/5515570.html
Copyright © 2011-2022 走看看