home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / perfmon / registry.c < prev    next >
C/C++ Source or Header  |  1997-10-05  |  6KB  |  190 lines

  1. /*****************************************************************************
  2.  *
  3.  *  Registry.c - This module handles requests for registry data, and
  4.  *               reading/writing of window placement data
  5.  *
  6.  *  Microsoft Confidential
  7.  *  Copyright (c) 1992-1997 Microsoft Corporation
  8.  *
  9.  *
  10.  ****************************************************************************/
  11.  
  12. #include <stdio.h>
  13.  
  14. #include "perfmon.h"
  15. #include "registry.h"
  16. #include "utils.h"      
  17. #include "sizes.h"
  18.  
  19. static TCHAR PerfmonNamesKey[] = TEXT("SOFTWARE\\Microsoft\\PerfMon") ;
  20. static TCHAR WindowKeyName[] = TEXT("WindowPos") ;
  21. static TCHAR TimeOutKeyName[] = TEXT("DataTimeOut") ;
  22.  
  23. VOID LoadLineGraphSettings(PGRAPHSTRUCT lgraph)
  24. {
  25.    lgraph->gMaxValues = DEFAULT_MAX_VALUES;
  26.    lgraph->gOptions.bLegendChecked = DEFAULT_F_DISPLAY_LEGEND;
  27.    lgraph->gOptions.bLabelsChecked = DEFAULT_F_DISPLAY_CALIBRATION;
  28.  
  29.    return;
  30. }
  31.  
  32. VOID LoadRefreshSettings(PGRAPHSTRUCT lgraph)
  33. {
  34.    lgraph->gInterval = DEF_GRAPH_INTERVAL;
  35.    lgraph->gOptions.eTimeInterval = (FLOAT) lgraph->gInterval / (FLOAT) 1000.0 ;
  36.    return;
  37. }
  38.  
  39.  
  40. BOOL LoadMainWindowPlacement (HWND hWnd)
  41.    {
  42.    WINDOWPLACEMENT   WindowPlacement ; 
  43.    TCHAR             szWindowPlacement [TEMP_BUF_LEN] ;
  44.    HKEY              hKeyNames ;
  45.    DWORD             Size;
  46.    DWORD             Type;
  47.    DWORD             Status;
  48.    DWORD             localDataTimeOut;
  49.    STARTUPINFO       StartupInfo ;
  50.  
  51.  
  52.    GetStartupInfo (&StartupInfo) ;
  53.  
  54.    DataTimeOut = DEFAULT_DATA_TIMEOUT ;
  55.  
  56.    Status = RegOpenKeyEx(HKEY_CURRENT_USER, PerfmonNamesKey,
  57.       0L, KEY_READ, &hKeyNames) ;
  58.  
  59.    if (Status == ERROR_SUCCESS)
  60.       {
  61.       // get the data timeout  value
  62.       Size = sizeof(localDataTimeOut) ;
  63.  
  64.       Status = RegQueryValueEx(hKeyNames, TimeOutKeyName, NULL,
  65.          &Type, (LPBYTE)&localDataTimeOut, &Size) ;
  66.       if (Status == ERROR_SUCCESS && Type == REG_DWORD)
  67.          {
  68.          DataTimeOut = localDataTimeOut ;
  69.          }
  70.  
  71.       // get the window placement data
  72.       Size = sizeof(szWindowPlacement) ;
  73.  
  74.       Status = RegQueryValueEx(hKeyNames, WindowKeyName, NULL,
  75.          &Type, (LPBYTE)szWindowPlacement, &Size) ;
  76.       RegCloseKey (hKeyNames) ;
  77.  
  78.       if (Status == ERROR_SUCCESS)
  79.          {
  80.  
  81.          int            iNumScanned ;
  82.    
  83.          iNumScanned = swscanf (szWindowPlacement,
  84.             TEXT("%d %d %d %d %d %d %d %d %d"),
  85.             &WindowPlacement.showCmd,
  86.             &WindowPlacement.ptMinPosition.x,
  87.             &WindowPlacement.ptMinPosition.y,
  88.             &WindowPlacement.ptMaxPosition.x,
  89.             &WindowPlacement.ptMaxPosition.y,
  90.             &WindowPlacement.rcNormalPosition.left,
  91.             &WindowPlacement.rcNormalPosition.top,
  92.             &WindowPlacement.rcNormalPosition.right,
  93.             &WindowPlacement.rcNormalPosition.bottom) ;
  94.          
  95.          if (StartupInfo.dwFlags == STARTF_USESHOWWINDOW)
  96.             {
  97.             WindowPlacement.showCmd = StartupInfo.wShowWindow ;
  98.             }
  99.          WindowPlacement.length = sizeof(WINDOWPLACEMENT);
  100.          WindowPlacement.flags = WPF_SETMINPOSITION;
  101.          if (!SetWindowPlacement (hWnd, &WindowPlacement)) {
  102.             return (FALSE);
  103.          }
  104.          bPerfmonIconic = IsIconic(hWnd) ;
  105.          return (TRUE) ;
  106.          }
  107.       }
  108.  
  109.    if (Status != ERROR_SUCCESS)
  110.       {
  111.       // open registry failed, use input from startup info or Max as default
  112.  
  113.       if (StartupInfo.dwFlags == STARTF_USESHOWWINDOW)
  114.          {
  115.          ShowWindow (hWnd, StartupInfo.wShowWindow) ;
  116.          }
  117.       else
  118.          {
  119.          ShowWindow (hWnd, SW_SHOWMAXIMIZED) ;
  120.          }
  121.       return (FALSE) ;
  122.       }
  123.    }
  124.  
  125.  
  126.  
  127. BOOL SaveMainWindowPlacement (HWND hWnd)
  128.    {
  129.    WINDOWPLACEMENT   WindowPlacement ;
  130.    TCHAR             ObjectType [2] ;
  131.    TCHAR             szWindowPlacement [TEMP_BUF_LEN] ;
  132.    HKEY              hKeyNames = 0 ;
  133.    DWORD             Size ;
  134.    DWORD             Status ;
  135.    DWORD             dwDisposition ;
  136.  
  137.    ObjectType [0] = TEXT(' ') ;
  138.    ObjectType [1] = TEXT('\0') ;
  139.  
  140.    WindowPlacement.length = sizeof(WINDOWPLACEMENT);
  141.    if (!GetWindowPlacement (hWnd, &WindowPlacement)) {
  142.       return FALSE;
  143.    }
  144.    TSPRINTF (szWindowPlacement, TEXT("%d %d %d %d %d %d %d %d %d"),
  145.             WindowPlacement.showCmd, 
  146.             WindowPlacement.ptMinPosition.x,
  147.             WindowPlacement.ptMinPosition.y,
  148.             WindowPlacement.ptMaxPosition.x,
  149.             WindowPlacement.ptMaxPosition.y,
  150.             WindowPlacement.rcNormalPosition.left,
  151.             WindowPlacement.rcNormalPosition.top,
  152.             WindowPlacement.rcNormalPosition.right,
  153.             WindowPlacement.rcNormalPosition.bottom) ;
  154.  
  155.    // try to create it first
  156.    Status = RegCreateKeyEx(HKEY_CURRENT_USER, PerfmonNamesKey, 0L,
  157.       ObjectType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WRITE,
  158.       NULL, &hKeyNames, &dwDisposition) ;
  159.  
  160.    // if it has been created before, then open it
  161.    if (dwDisposition == REG_OPENED_EXISTING_KEY)
  162.       {
  163.       Status = RegOpenKeyEx(HKEY_CURRENT_USER, PerfmonNamesKey, 0L,
  164.          KEY_WRITE, &hKeyNames) ;
  165.       }
  166.  
  167.    // we got the handle, now store the window placement data
  168.    if (Status == ERROR_SUCCESS)
  169.       {
  170.       Size = (lstrlen (szWindowPlacement) + 1) * sizeof (TCHAR) ;
  171.  
  172.       Status = RegSetValueEx(hKeyNames, WindowKeyName, 0,
  173.          REG_SZ, (LPBYTE)szWindowPlacement, Size) ;
  174.  
  175.       if (dwDisposition != REG_OPENED_EXISTING_KEY && Status == ERROR_SUCCESS)
  176.          {
  177.          // now add the DataTimeOut key for the first time
  178.          Status = RegSetValueEx(hKeyNames, TimeOutKeyName, 0,
  179.             REG_DWORD, (LPBYTE)&DataTimeOut, sizeof(DataTimeOut)) ;
  180.          }
  181.  
  182.       RegCloseKey (hKeyNames) ;
  183.  
  184.       }
  185.  
  186.    return (Status == ERROR_SUCCESS) ;
  187.    }
  188.  
  189.  
  190.