亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? general.c

?? 這是一個開放源代碼的與WINNT/WIN2K/WIN2003兼容的操作系統
?? C
字號:
/*
 * PROJECT:     ReactOS System Control Panel Applet
 * LICENSE:     GPL - See COPYING in the top level directory
 * FILE:        dll/cpl/sysdm/general.c
 * PURPOSE:     General System Information
 * COPYRIGHT:   Copyright Thomas Weidenmueller <w3seek@reactos.org>
 *              Copyright 2006 Ged Murphy <gedmurphy@gmail.com>
 *              Copyright 2006-2007 Colin Finck <mail@colinfinck.de>
 *
 */


#include "precomp.h"

typedef struct _IMGINFO
{
    HBITMAP hBitmap;
    INT cxSource;
    INT cySource;
} IMGINFO, *PIMGINFO;


void
ShowLastWin32Error(HWND hWndOwner)
{
    LPTSTR lpMsg;
    DWORD LastError;

    LastError = GetLastError();

    if((LastError == 0) ||
        !FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
                       FORMAT_MESSAGE_FROM_SYSTEM,
                       NULL,
                       LastError,
                       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                       (LPTSTR)&lpMsg,
                       0,
                       NULL))
    {
        return;
    }

    MessageBox(hWndOwner, lpMsg, NULL, MB_OK | MB_ICONERROR);

    LocalFree((LPVOID)lpMsg);
}


static VOID
InitImageInfo(PIMGINFO ImgInfo)
{
    BITMAP bitmap;

    ZeroMemory(ImgInfo, sizeof(*ImgInfo));

    ImgInfo->hBitmap = LoadImage(hApplet,
                                 MAKEINTRESOURCE(IDB_ROSBMP),
                                 IMAGE_BITMAP,
                                 0,
                                 0,
                                 LR_DEFAULTCOLOR);

    if (ImgInfo->hBitmap != NULL)
    {
        GetObject(ImgInfo->hBitmap, sizeof(BITMAP), &bitmap);

        ImgInfo->cxSource = bitmap.bmWidth;
        ImgInfo->cySource = bitmap.bmHeight;
    }
}


static VOID
SetRegTextData(HWND hwnd,
               HKEY hKey,
               LPTSTR Value,
               UINT uID)
{
    LPTSTR lpBuf = NULL;
    DWORD BufSize = 0;
    DWORD Type;

    if (RegQueryValueEx(hKey,
                        Value,
                        NULL,
                        &Type,
                        NULL,
                        &BufSize) == ERROR_SUCCESS)
    {
        lpBuf = HeapAlloc(GetProcessHeap(),
                          0,
                          BufSize);
        if (!lpBuf) return;

        if (RegQueryValueEx(hKey,
                            Value,
                            NULL,
                            &Type,
                            (PBYTE)lpBuf,
                            &BufSize) == ERROR_SUCCESS)
        {
            SetDlgItemText(hwnd,
                           uID,
                           lpBuf);
        }

        HeapFree(GetProcessHeap(),
                 0,
                 lpBuf);
    }
}

static INT
SetProcNameString(HWND hwnd,
                  HKEY hKey,
                  LPTSTR Value,
                  UINT uID1,
                  UINT uID2)
{
    LPTSTR lpBuf = NULL;
    DWORD BufSize = 0;
    DWORD Type;
    INT Ret = 0;
    TCHAR szBuf[31];
    TCHAR* szLastSpace;
    INT LastSpace = 0;
    
    if (RegQueryValueEx(hKey,
                        Value,
                        NULL,
                        &Type,
                        NULL,
                        &BufSize) == ERROR_SUCCESS)
    {
        lpBuf = HeapAlloc(GetProcessHeap(),
                          0,
                          BufSize);   
        if (!lpBuf) return 0;

        if (RegQueryValueEx(hKey,
                            Value,
                            NULL,
                            &Type,
                            (PBYTE)lpBuf,
                            &BufSize) == ERROR_SUCCESS)
        {
            if(BufSize > ((30 + 1) * sizeof(TCHAR)))
            {
                /* Wrap the Processor Name String like XP does:                           *
                *   - Take the first 30 characters and look for the last space.          *
                *     Then wrap the string after this space.                             *
                *   - If no space is found, wrap the string after character 30.          *
                *                                                                        *
                * For example the Processor Name String of a Pentium 4 is right-aligned. *
                * With this wrapping the first line looks centered.                      */

                _tcsncpy(szBuf, lpBuf, 30);
                szBuf[30] = 0;
                szLastSpace = _tcsrchr(szBuf, ' ');

                if(szLastSpace == 0)
                    LastSpace = 30;
                else
                {
                    LastSpace = (szLastSpace - szBuf);
                    szBuf[LastSpace] = 0;
                }

                _tcsncpy(szBuf, lpBuf, LastSpace);

                SetDlgItemText(hwnd,
                               uID1,
                               szBuf);

                SetDlgItemText(hwnd,
                               uID2,
                               lpBuf+LastSpace+1);

                /* Return the number of used lines */
                Ret = 2;
            }
            else
            {
                SetDlgItemText(hwnd,
                             uID1,
                             lpBuf);

                Ret = 1;
            }
        }

        HeapFree(GetProcessHeap(),
                 0,
                 lpBuf);
    }

    return Ret;
}

static  VOID
SetProcSpeed(HWND hwnd,
             HKEY hKey,
             LPTSTR Value,
             UINT uID)

{
    TCHAR szBuf[64];
    DWORD BufSize = sizeof(DWORD);
    DWORD Type = REG_SZ;
    PROCESSOR_POWER_INFORMATION ppi;

    ZeroMemory(&ppi,
               sizeof(ppi));

    if ((CallNtPowerInformation(ProcessorInformation,
                                NULL,
                                0,
                                (PVOID)&ppi,
                                sizeof(ppi)) == STATUS_SUCCESS &&
         ppi.CurrentMhz != 0) ||
         RegQueryValueEx(hKey,
                         Value,
                         NULL,
                         &Type,
                         (PBYTE)&ppi.CurrentMhz,
                         &BufSize) == ERROR_SUCCESS)
    {
        if (ppi.CurrentMhz < 1000)
        {
            _stprintf(szBuf, _T("%lu MHz"), ppi.CurrentMhz);
        }
        else
        {
            double flt = ppi.CurrentMhz / 1000.0;
            _stprintf(szBuf, _T("%.2f GHz"), flt);
        }

        SetDlgItemText(hwnd,
                       uID,
                       szBuf);
    }
}

static VOID
GetSystemInformation(HWND hwnd)
{
    HKEY hKey;
    TCHAR ProcKey[] = _T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
    MEMORYSTATUSEX MemStat;
    TCHAR Buf[32];
    INT CurMachineLine = IDC_MACHINELINE1;


    /* Get Processor information *
     * although undocumented, this information is being pulled
     * directly out of the registry instead of via setupapi as it
     * contains all the info we need, and should remain static
     */
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                     ProcKey,
                     0,
                     KEY_READ,
                     &hKey) == ERROR_SUCCESS)
    {
        SetRegTextData(hwnd,
                       hKey,
                       _T("VendorIdentifier"),
                       CurMachineLine);
        CurMachineLine++;
        
        CurMachineLine += SetProcNameString(hwnd,
                                            hKey,
                                            _T("ProcessorNameString"),
                                            CurMachineLine,
                                            CurMachineLine + 1);
        
        SetProcSpeed(hwnd,
                     hKey,
                     _T("~MHz"),
                     CurMachineLine);
        CurMachineLine++;
    }


    /* Get total physical RAM */
    MemStat.dwLength = sizeof(MemStat);
    if (GlobalMemoryStatusEx(&MemStat))
    {
        TCHAR szStr[32];
        double dTotalPhys;
        UINT i = 0;
        static const UINT uStrId[] = {
            IDS_MEGABYTE,
            IDS_GIGABYTE,
            IDS_TERABYTE,
            IDS_PETABYTE
        };

        if (MemStat.ullTotalPhys > 1024 * 1024 * 1024)
        {
            /* We're dealing with GBs or more */
            MemStat.ullTotalPhys /= 1024 * 1024;
            i++;

            if (MemStat.ullTotalPhys > 1024 * 1024)
            {
                /* We're dealing with TBs or more */
                MemStat.ullTotalPhys /= 1024;
                i++;

                if (MemStat.ullTotalPhys > 1024 * 1024)
                {
                    /* We're dealing with PBs or more */
                    MemStat.ullTotalPhys /= 1024;
                    i++;

                    dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
                }
                else
                    dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
            }
            else
                dTotalPhys = (double)MemStat.ullTotalPhys / 1024;
        }
        else
        {
            /* We're daling with MBs */
            dTotalPhys = (double)MemStat.ullTotalPhys / 1024 / 1024;
        }

        if (LoadString(hApplet, uStrId[i], szStr, sizeof(szStr) / sizeof(szStr[0])))
        {
            if( _stprintf(Buf, _T("%.2f %s"), dTotalPhys, szStr) )
            {
                SetDlgItemText(hwnd,
                               CurMachineLine,
                               Buf);
            }
        }
    }
}


/* Property page dialog callback */
INT_PTR CALLBACK
GeneralPageProc(HWND hwndDlg,
                UINT uMsg,
                WPARAM wParam,
                LPARAM lParam)
{
    static IMGINFO ImgInfo;

    UNREFERENCED_PARAMETER(lParam);
    UNREFERENCED_PARAMETER(wParam);

    switch(uMsg)
    {
        case WM_INITDIALOG:
        {
            InitImageInfo(&ImgInfo);
            GetSystemInformation(hwndDlg);
        }
        break;

        case WM_COMMAND:
        {
            if (LOWORD(wParam) == IDC_LICENCE)
            {
                DialogBox(hApplet,
                          MAKEINTRESOURCE(IDD_LICENCE),
                          hwndDlg,
                          LicenceDlgProc);

                return TRUE;
            }
        }
        break;

        case WM_DRAWITEM:
        {
            LPDRAWITEMSTRUCT lpDrawItem;
            lpDrawItem = (LPDRAWITEMSTRUCT) lParam;
            if(lpDrawItem->CtlID == IDC_ROSIMG)
            {
                HDC hdcMem;
                LONG left;

                /* position image in centre of dialog */
                left = (lpDrawItem->rcItem.right - ImgInfo.cxSource) / 2;

                hdcMem = CreateCompatibleDC(lpDrawItem->hDC);
                if (hdcMem != NULL)
                {
                    SelectObject(hdcMem, ImgInfo.hBitmap);
                    BitBlt(lpDrawItem->hDC,
                           left,
                           lpDrawItem->rcItem.top,
                           lpDrawItem->rcItem.right - lpDrawItem->rcItem.left,
                           lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top,
                           hdcMem,
                           0,
                           0,
                           SRCCOPY);
                    DeleteDC(hdcMem);
                }
            }
            return TRUE;
        }

        case WM_NOTIFY:
        {
            NMHDR *nmhdr = (NMHDR *)lParam;

            if (nmhdr->idFrom == IDC_ROSHOMEPAGE_LINK && nmhdr->code == NM_CLICK)
            {
                PNMLINK nml = (PNMLINK)nmhdr;

                ShellExecuteW(hwndDlg,
                              L"open",
                              nml->item.szUrl,
                              NULL,
                              NULL,
                              SW_SHOWNORMAL);
            }
            break;
        }

    }

    return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜片在线观看高清观看| 亚洲人成网站影音先锋播放| 日欧美一区二区| 欧美丰满嫩嫩电影| 日韩国产欧美三级| 精品国产乱码久久久久久免费| 久久精品国内一区二区三区| 精品国产91乱码一区二区三区| 亚洲乱码国产乱码精品精小说| 91小视频在线观看| 91黄视频在线观看| 国产欧美一区二区精品忘忧草| 久久久精品tv| av一本久道久久综合久久鬼色| 图片区日韩欧美亚洲| 国产精品成人一区二区三区夜夜夜| 日韩一区二区精品葵司在线| 欧美综合久久久| www.久久久久久久久| 国产一区二区不卡老阿姨| 欧美aaaaaa午夜精品| 亚洲国产精品精华液网站 | 色狠狠色狠狠综合| 成人激情动漫在线观看| 国产最新精品精品你懂的| 日韩av电影天堂| 亚洲成国产人片在线观看| 亚洲视频免费在线| 中文字幕一区二区在线播放| 国产亚洲欧美色| 久久精子c满五个校花| 日韩欧美国产不卡| 日韩视频免费观看高清完整版 | 中文字幕精品一区| 国产日韩欧美精品电影三级在线| 精品国产凹凸成av人导航| 欧美成人aa大片| 亚洲精品一区二区三区蜜桃下载| 91精品国产高清一区二区三区蜜臀| 欧美日韩一区在线观看| 欧美日韩精品一区二区| 欧洲中文字幕精品| 欧美在线不卡视频| 欧美挠脚心视频网站| 欧美日韩五月天| 日韩视频免费观看高清完整版 | 亚洲成精国产精品女| 亚洲国产视频一区二区| 日韩精品欧美精品| 秋霞电影一区二区| 精品伊人久久久久7777人| 国内精品视频一区二区三区八戒| 国产一区三区三区| 国产99久久久国产精品潘金| 国产91精品一区二区| av激情综合网| 欧美午夜一区二区| 91精品国产色综合久久不卡电影| 欧美一级二级三级蜜桃| 精品久久久久久亚洲综合网| 国产精品色哟哟| 亚洲精品伦理在线| 三级不卡在线观看| 国产精品99久久久久久似苏梦涵 | 国产高清精品网站| 色综合久久综合网| 欧美美女一区二区在线观看| 日韩视频在线观看一区二区| 久久久久久久久伊人| 一区二区三区欧美激情| 日韩影院精彩在线| 夫妻av一区二区| 欧美日韩一二三区| 国产丝袜美腿一区二区三区| 亚洲一区二区三区四区的 | 国产成人一区二区精品非洲| 一本到不卡精品视频在线观看| 欧美日韩一级视频| 日本一区二区动态图| 亚洲香肠在线观看| 国产河南妇女毛片精品久久久| 一本大道久久a久久精品综合| 日韩一区二区电影在线| 国产精品大尺度| 奇米精品一区二区三区在线观看 | 7777精品伊人久久久大香线蕉| 久久影音资源网| 亚洲午夜激情av| 国产福利91精品一区| 欧美四级电影网| 中文字幕精品在线不卡| 日本不卡视频一二三区| 91日韩在线专区| 久久色在线视频| 午夜a成v人精品| 波多野结衣在线一区| 91精品国产麻豆| 亚洲一区欧美一区| 风间由美一区二区三区在线观看| 欧美精品九九99久久| 中文字幕一区免费在线观看| 久久av中文字幕片| 91.com视频| 亚洲小少妇裸体bbw| 成人动漫精品一区二区| 精品久久久久av影院| 亚瑟在线精品视频| 在线看国产一区二区| 亚洲国产成人私人影院tom| 免费观看成人鲁鲁鲁鲁鲁视频| 91极品视觉盛宴| 亚洲视频一区二区在线| 国产伦精品一区二区三区视频青涩| 67194成人在线观看| 一区二区激情视频| 色综合天天性综合| 国产精品国产三级国产专播品爱网| 国产一区二区三区四区五区美女| 欧美一区二区播放| 日韩精品久久久久久| 欧美色图在线观看| 一区二区三区在线看| av中文字幕亚洲| 国产精品女上位| 国产激情91久久精品导航| 久久伊人中文字幕| 精品一区二区久久久| 欧美va亚洲va香蕉在线| 日本不卡免费在线视频| 在线不卡中文字幕| 午夜久久久久久久久| 欧美日韩国产首页| 亚洲成在人线在线播放| 欧美日韩国产片| 日本午夜精品视频在线观看| 3d动漫精品啪啪1区2区免费 | 亚洲免费观看高清完整版在线观看熊| 成人免费视频播放| 国产精品免费视频观看| 不卡区在线中文字幕| 国产精品久久久久久久久晋中 | 亚洲视频小说图片| 91色在线porny| 亚洲影院在线观看| 欧美美女视频在线观看| 丝袜亚洲另类丝袜在线| 欧美一区二区日韩| 国产毛片精品视频| 国产精品五月天| 日本道色综合久久| 午夜电影网亚洲视频| 精品国内二区三区| 国产宾馆实践打屁股91| 亚洲精选视频免费看| 欧美三区在线观看| 美女一区二区在线观看| 久久久高清一区二区三区| av在线免费不卡| 亚洲h精品动漫在线观看| 日韩精品一区在线观看| 国产激情视频一区二区三区欧美 | 久久精品国产99久久6| 久久久久久免费| a级高清视频欧美日韩| 亚洲sss视频在线视频| 精品国产99国产精品| kk眼镜猥琐国模调教系列一区二区| 亚洲香蕉伊在人在线观| 精品国精品国产| eeuss国产一区二区三区| 午夜欧美电影在线观看| 久久九九久久九九| 欧美亚洲国产一区二区三区va| 男女性色大片免费观看一区二区 | 欧美亚洲国产怡红院影院| 裸体歌舞表演一区二区| 国产精品女上位| 欧美久久久久久蜜桃| 国产一区 二区| 亚洲电影第三页| 国产视频911| 欧美在线不卡视频| 国产精品亚洲成人| 亚洲成人777| 综合激情成人伊人| 精品伦理精品一区| 91久久精品一区二区三| 国模无码大尺度一区二区三区| 亚洲最大成人综合| 国产亚洲欧洲一区高清在线观看| 欧洲精品中文字幕| 丁香婷婷深情五月亚洲| 亚洲国产日韩a在线播放| 日本一区二区三区电影| 88在线观看91蜜桃国自产| av电影天堂一区二区在线| 狠狠色狠狠色合久久伊人| 亚洲高清在线精品| 亚洲视频在线观看三级| 国产亚洲综合在线|