|
|
1.1 ! root 1: /**************************************************************************\ ! 2: * getsys.c -- sample program demonstrating the GetSys... APIs ! 3: * ! 4: * In this sample the main window is a dialog box. There is no need to ! 5: * register a new window class or create a new window. Instead just call ! 6: * DialogBox() and use the template defined in the .RC file. All of the ! 7: * interesting code is thus in the window procedure for the dialog box. ! 8: * In this case, simply respond to the button command messsages and fill ! 9: * the list box with appropriate values. ! 10: * ! 11: * The dialog template currently specifies a "monospaced font." This makes ! 12: * the dialog look somewhat odd, but makes text formatting much easier. If ! 13: * the specified font does not exist on the system running this sample, the ! 14: * program will work fine, but the contents of the listbox will not look ! 15: * very good. ! 16: * ! 17: \**************************************************************************/ ! 18: ! 19: #include <windows.h> ! 20: #include "getsys.h" ! 21: ! 22: ! 23: /**************************************************************************\ ! 24: * ! 25: * function: WinMain() ! 26: * ! 27: * input parameters: c.f. generic sample ! 28: * ! 29: \**************************************************************************/ ! 30: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, ! 31: LPSTR lpCmdLine, int nCmdShow) ! 32: { ! 33: int ret; ! 34: ! 35: UNREFERENCED_PARAMETER( hPrevInstance ); ! 36: UNREFERENCED_PARAMETER( lpCmdLine ); ! 37: UNREFERENCED_PARAMETER( nCmdShow); ! 38: ! 39: ret = DialogBox (hInstance, "getsysDlg", NULL, (DLGPROC)MainDlgProc); ! 40: return ret; ! 41: } ! 42: ! 43: ! 44: ! 45: /**************************************************************************\ ! 46: * ! 47: * function: MainDlgProc() ! 48: * ! 49: * input parameters: standard window procedure parameters. ! 50: * ! 51: \**************************************************************************/ ! 52: LRESULT MainDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) ! 53: { ! 54: UNREFERENCED_PARAMETER(lParam); ! 55: ! 56: ! 57: switch (message) { ! 58: ! 59: /********************************************************************\ ! 60: * WM_SYSCOMMAND ! 61: * ! 62: * ignore all syscommand messages, except for SC_CLOSE. ! 63: * on this one, call EndDialog(). ! 64: \********************************************************************/ ! 65: case WM_SYSCOMMAND: ! 66: if (wParam == SC_CLOSE) { ! 67: EndDialog (hwnd, TRUE); ! 68: return TRUE; ! 69: } else ! 70: return FALSE; ! 71: break; ! 72: ! 73: ! 74: /********************************************************************\ ! 75: * WM_COMMAND ! 76: * ! 77: * When the different buttons are hit, clear the list box, disable ! 78: * updating to it, call the function which will fill it, reenable ! 79: * updating, and then force a repaint. ! 80: * ! 81: \********************************************************************/ ! 82: case WM_COMMAND: ! 83: ! 84: /* if the list box sends back messages, return. Otherwise we will ! 85: * clear it out, and that is not what we want to do at this point. ! 86: */ ! 87: if (LOWORD(wParam)==DID_LISTBOX) return TRUE; ! 88: ! 89: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, FALSE, 0); ! 90: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0, 0); ! 91: ! 92: /* switch on the control ID of the button that is pressed. */ ! 93: switch (LOWORD(wParam)) { ! 94: case DID_SYSCOLORS : doSysColors (hwnd); break; ! 95: case DID_DIRECTORY : doDirectory (hwnd); break; ! 96: case DID_INFO : doInfo (hwnd); break; ! 97: case DID_METRICS : doMetrics (hwnd); break; ! 98: case DID_PALETTE : doPalette (hwnd); break; ! 99: case DID_TIME : doTime (hwnd); break; ! 100: } /* end switch (LOWORD()) */ ! 101: ! 102: SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, TRUE, 0); ! 103: InvalidateRect (GetDlgItem (hwnd, DID_LISTBOX), NULL, TRUE); ! 104: return TRUE; ! 105: break; /* end WM_COMMAND */ ! 106: ! 107: ! 108: default: return FALSE; ! 109: } /* end switch(message) */ ! 110: } ! 111: ! 112: ! 113: ! 114: ! 115: ! 116: ! 117: /**************************************************************************\ ! 118: * ! 119: * functions: do...() ! 120: * ! 121: * In all of the functions that follow, first set the text int the static ! 122: * text field to label the contents of the list box. Then, query the ! 123: * desired system information, format it into strings, and add those strings ! 124: * to the listbox. ! 125: * ! 126: * input parameters: HWND - window handle for the dialog box. ! 127: * global variables: buffer - array of char's to hold string w/ info. ! 128: * ! 129: \**************************************************************************/ ! 130: ! 131: VOID doSysColors (HWND hwnd) ! 132: { ! 133: int i; ! 134: DWORD answer; ! 135: ! 136: SetDlgItemText (hwnd, DID_TEXT, "System Colors"); ! 137: ! 138: for (i = 0; i<NSYSCOLORS; i++) { ! 139: ! 140: /*******************************************************/ ! 141: /*******************************************************/ ! 142: answer = GetSysColor (SysColors[i].Value); ! 143: /*******************************************************/ ! 144: /*******************************************************/ ! 145: ! 146: wsprintf (buffer, SysColors[i].String, (int)answer); ! 147: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 148: } ! 149: return; ! 150: } ! 151: ! 152: ! 153: ! 154: VOID doDirectory (HWND hwnd) ! 155: { ! 156: char buffer[MAX_PATH]; ! 157: ! 158: SetDlgItemText (hwnd, DID_TEXT, "System Directory"); ! 159: ! 160: /*******************************************************/ ! 161: /*******************************************************/ ! 162: GetSystemDirectory (buffer, MAX_PATH); ! 163: /*******************************************************/ ! 164: /*******************************************************/ ! 165: ! 166: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 167: ! 168: return; ! 169: } ! 170: ! 171: ! 172: VOID doInfo(HWND hwnd) ! 173: { ! 174: SYSTEM_INFO si; ! 175: ! 176: SetDlgItemText (hwnd, DID_TEXT, "SYSTEM_INFO"); ! 177: ! 178: /*******************************************************/ ! 179: /*******************************************************/ ! 180: GetSystemInfo (&si); ! 181: /*******************************************************/ ! 182: /*******************************************************/ ! 183: ! 184: wsprintf (buffer, "dwOemId \t%d", (int) si.dwOemId ); ! 185: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 186: wsprintf (buffer, "dwPageSize \t%d", (int) si.dwPageSize ); ! 187: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 188: wsprintf (buffer, "lpMinimumApplicationAddress \t%08lx", (LONG)si.lpMinimumApplicationAddress ); ! 189: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 190: wsprintf (buffer, "lpMaximumApplicationAddress \t%08lx", (LONG)si.lpMaximumApplicationAddress ); ! 191: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 192: wsprintf (buffer, "dwActiveProcessorMask \t%d", (int) si.dwActiveProcessorMask ); ! 193: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 194: wsprintf (buffer, "dwNumberOfProcessors \t%d", (int) si.dwNumberOfProcessors ); ! 195: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 196: wsprintf (buffer, "dwProcessorType \t%d", (int) si.dwProcessorType ); ! 197: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 198: wsprintf (buffer, "dwProcessorRevision \t%d", (int) si.dwProcessorRevision ); ! 199: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 200: wsprintf (buffer, "dwProcessorOptions \t%d", (int) si.dwProcessorOptions ); ! 201: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 202: ! 203: return; ! 204: } ! 205: ! 206: ! 207: ! 208: VOID doMetrics (HWND hwnd) ! 209: { ! 210: int i; ! 211: int answer; ! 212: ! 213: SetDlgItemText (hwnd, DID_TEXT, "System Metrics"); ! 214: ! 215: for (i = 0; i<NSYSMETRICS; i++) { ! 216: ! 217: /*******************************************************/ ! 218: /*******************************************************/ ! 219: answer = GetSystemMetrics (SystemMetrics[i].Value); ! 220: /*******************************************************/ ! 221: /*******************************************************/ ! 222: ! 223: wsprintf (buffer, SystemMetrics[i].String, (int)answer); ! 224: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 225: } ! 226: ! 227: return; ! 228: } ! 229: ! 230: ! 231: ! 232: VOID doPalette(HWND hwnd) ! 233: { ! 234: int nEntries; ! 235: HDC hdc; ! 236: int i; ! 237: LPPALETTEENTRY lpp; ! 238: ! 239: SetDlgItemText (hwnd, DID_TEXT, "System Palette"); ! 240: ! 241: /* this function is slightly different because the amount of information ! 242: * is not known until run time. First find the number of entries in the ! 243: * palette (16 for VGA, but 256 for 8514, ...), then allocate enough ! 244: * space to hold all of them, query the information, put it in the list ! 245: * box, and then free up the memory allocated. ! 246: */ ! 247: hdc = GetDC (hwnd); ! 248: nEntries = GetSystemPaletteEntries (hdc, 0,0, NULL); ! 249: lpp = (LPPALETTEENTRY)LocalAlloc (LPTR, ! 250: (DWORD) (nEntries* sizeof (PALETTEENTRY))); ! 251: ! 252: if (lpp == NULL) { ! 253: MessageBox (hwnd, "Memory allocation failed.", "Warning", MB_ICONSTOP | MB_OK); ! 254: return; ! 255: } ! 256: ! 257: /*******************************************************/ ! 258: /*******************************************************/ ! 259: nEntries = GetSystemPaletteEntries (hdc, 0,nEntries, lpp); ! 260: /*******************************************************/ ! 261: /*******************************************************/ ! 262: ! 263: ReleaseDC (hwnd, hdc); ! 264: ! 265: for (i = 0; i<nEntries; i++) { ! 266: wsprintf (buffer, "%d) \t%x \t%x \t%x \t%x", i, ! 267: lpp[i].peRed, lpp[i].peGreen, lpp[i].peBlue, lpp[i].peFlags); ! 268: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 269: } ! 270: ! 271: LocalFree (LocalHandle ((LPSTR)lpp)); ! 272: return; ! 273: } ! 274: ! 275: ! 276: ! 277: ! 278: VOID doTime (HWND hwnd) ! 279: { ! 280: SYSTEMTIME st; ! 281: ! 282: SetDlgItemText (hwnd, DID_TEXT, "SYSTEMTIME"); ! 283: ! 284: /*******************************************************/ ! 285: /*******************************************************/ ! 286: GetSystemTime (&st); ! 287: /*******************************************************/ ! 288: /*******************************************************/ ! 289: ! 290: wsprintf (buffer, "wYear \t%d", (int)st.wYear ); ! 291: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 292: wsprintf (buffer, "wMonth \t%d", (int)st.wMonth ); ! 293: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 294: wsprintf (buffer, "wDayOfWeek \t%d", (int)st.wDayOfWeek ); ! 295: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 296: wsprintf (buffer, "wDay \t%d", (int)st.wDay ); ! 297: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 298: wsprintf (buffer, "wHour \t%d", (int)st.wHour ); ! 299: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 300: wsprintf (buffer, "wMinute \t%d", (int)st.wMinute ); ! 301: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 302: wsprintf (buffer, "wSecond \t%d", (int)st.wSecond ); ! 303: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 304: wsprintf (buffer, "wMilliseconds \t%d", (int)st.wMilliseconds ); ! 305: SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer); ! 306: return; ! 307: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.