FALSE, // Italic
FALSE, // Underline
FALSE, // Strikeout
- ANSI_CHARSET, // Character Set Identifier
+ DEFAULT_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
- "Tahoma"); // Font Name
+ _T("Tahoma")); // Font Name
SelectObject(hDC, font); // Selects The Font We Created
glDeleteLists(base, 256); // Delete All 256 Characters
}
-GLvoid glPrint(char *text) // Custom GL "Print" Routine
+GLvoid glPrint(LPWSTR text) // Custom GL "Print" Routine
{
if (text == NULL) // If There's No Text
return; // Do Nothing
glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
glListBase(base); // Sets The Base Character to 32
- glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
+ glCallLists(wcslen(text), GL_UNSIGNED_SHORT, text); // Draws The Display List Text
glPopAttrib(); // Pops The Display List Bits
}
if (!PixelFormat) // No Matching Pixel Format?
{
- MessageBox(0,"Can't Find A Suitable PixelFormat.","Error",MB_OK|MB_ICONERROR);
+ MessageBox(0,_TEXT("Can't Find A Suitable PixelFormat."),_TEXT("Error"),MB_OK|MB_ICONERROR);
PostQuitMessage(0); // This Sends A 'Message' Telling The Program To Quit
break; // Prevents The Rest Of The Code From Running
}
if(!SetPixelFormat(hDC,PixelFormat,&pfd)) // Can We Set The Pixel Mode?
{
- MessageBox(0,"Can't Set The PixelFormat.","Error",MB_OK|MB_ICONERROR);
+ MessageBox(0,_TEXT("Can't Set The PixelFormat."),_TEXT("Error"),MB_OK|MB_ICONERROR);
PostQuitMessage(0); // This Sends A 'Message' Telling The Program To Quit
break; // Prevents The Rest Of The Code From Running
}
hRC = wglCreateContext(hDC); // Grab A Rendering Context
if(!hRC) // Did We Get One?
{
- MessageBox(0,"Can't Create A GL Rendering Context.","Error",MB_OK|MB_ICONERROR);
+ MessageBox(0,_TEXT("Can't Create A GL Rendering Context."),_TEXT("Error"),MB_OK|MB_ICONERROR);
PostQuitMessage(0); // This Sends A 'Message' Telling The Program To Quit
break; // Prevents The Rest Of The Code From Running
}
if(!wglMakeCurrent(hDC, hRC)) // Can We Make The RC Active?
{
- MessageBox(0,"Can't Activate GLRC.","Error",MB_OK|MB_ICONERROR);
+ MessageBox(0,_TEXT("Can't Activate GLRC."),_TEXT("Error"),MB_OK|MB_ICONERROR);
PostQuitMessage(0); // This Sends A 'Message' Telling The Program To Quit
break; // Prevents The Rest Of The Code From Running
}
}
}
-void ParseCommandLine(PSTR szCmdLine, int *chOption, HWND *hwndParent)
+//
+// Look for any options Windows has passed to us:
+//
+// -a <hwnd> (set password)
+// -s (screensave)
+// -p <hwnd> (preview)
+// -c <hwnd> (configure)
+//
+VOID ParseCommandLine(LPWSTR szCmdLine, UCHAR *chOption, HWND *hwndParent)
{
- int ch;
-
- if (!strlen(szCmdLine))
- return;
-
- ch = *szCmdLine++;
+ UCHAR ch = *szCmdLine++;
if(ch == '-' || ch == '/')
ch = *szCmdLine++;
if(ch >= 'A' && ch <= 'Z')
- ch += 'a' - 'A';
+ ch += 'a' - 'A'; //convert to lower case
*chOption = ch;
-
- if (ch == 's' || ch == 'c')
- return;
-
ch = *szCmdLine++;
if(ch == ':')
if(isdigit(ch))
{
- unsigned int i = atoi(szCmdLine - 1);
+ unsigned int i = _wtoi(szCmdLine - 1);
*hwndParent = (HWND)i;
}
else
- *hwndParent = 0;
+ *hwndParent = NULL;
}
//
DialogBox(hInstance, MAKEINTRESOURCE(IDD_CONFIG), NULL , (DLGPROC)ConfigDlgProc);
}
-int WINAPI WinMain (HINSTANCE hInst,
+int CALLBACK wWinMain (HINSTANCE hInst,
HINSTANCE hPrev,
- LPSTR lpCmdLine,
+ LPWSTR lpCmdLine,
int iCmdShow)
{
HWND hwndParent = 0;
- int chOption = 0;
+ UCHAR chOption;
MSG Message;
hInstance = hInst;
-/*\r
- * Copyright 2003 J Brown\r
- * Copyright 2006 Eric Kohl\r
- * Copyright 2007 Marc Piulachs (marc.piulachs@codexchange.net)\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA\r
- */\r
-\r
-#include <windows.h>\r
-#include <tchar.h>\r
-#include "resource.h"\r
-\r
-#define RANDOM( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))\r
-\r
-#define APPNAME _T("Logon")\r
-#define APP_TIMER 1\r
-#define APP_TIMER_INTERVAL 2000\r
-\r
-#define BITMAP_HEIGHT 240;\r
-#define BITMAP_WIDTH 340\r
-\r
-HINSTANCE hInstance;\r
-\r
-BOOL fullscreen = FALSE;\r
-\r
-void DrawScreen (HDC hdc, HDC hMemDC , RECT rect)\r
-{\r
- int x;\r
- int y;\r
- int width = BITMAP_WIDTH;\r
- int height = BITMAP_HEIGHT;\r
-\r
- if (!fullscreen)\r
- {\r
- width = width / 20;\r
- height = height / 20;\r
- }\r
-\r
- x = RANDOM (0, rect.right - width);\r
- y = RANDOM (0, rect.bottom - height);\r
-\r
- BitBlt(\r
- hdc,\r
- x,\r
- y,\r
- width,\r
- height,\r
- hMemDC,\r
- 0,\r
- 0,\r
- SRCCOPY);\r
-}\r
-\r
-HBITMAP GetScreenSaverBitmap (void)\r
-{\r
- OSVERSIONINFOEX osvi;\r
-\r
- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));\r
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);\r
- GetVersionEx ((OSVERSIONINFO *) &osvi);\r
-\r
- switch(osvi.wProductType)\r
- {\r
- case VER_NT_WORKSTATION:\r
- return LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_WORKSTATION));\r
- break;\r
- default:\r
- return LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SERVER));\r
- break;\r
- }\r
-}\r
-\r
-LRESULT WINAPI WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)\r
-{\r
- static POINT ptLast;\r
- static POINT ptCursor;\r
- static BOOL fFirstTime = TRUE;\r
-\r
- static PAINTSTRUCT ps;\r
- static RECT rect;\r
- static HDC hDC;\r
- static HDC hMemDC;\r
- static HBRUSH hBlkBrush;\r
- static HBITMAP bitmap;\r
-\r
- switch (msg)\r
- {\r
- case WM_CREATE:\r
- {\r
- hDC = GetDC(hwnd);\r
- hBlkBrush = (HBRUSH) GetStockObject(BLACK_BRUSH);\r
- hMemDC = CreateCompatibleDC(hDC);\r
- GetClientRect(hwnd, &rect);\r
-\r
- bitmap = GetScreenSaverBitmap ();\r
-\r
- if(bitmap == NULL)\r
- {\r
- MessageBox(\r
- hwnd,\r
- _T("Fatal Error: Could not load bitmap"),\r
- _T("Error"),\r
- MB_OK | MB_ICONEXCLAMATION);\r
- }\r
-\r
- SetTimer (\r
- hwnd,\r
- APP_TIMER,\r
- APP_TIMER_INTERVAL,\r
- NULL);\r
-\r
- break;\r
- }\r
- case WM_PAINT:\r
- {\r
- hDC = BeginPaint(hwnd, &ps);\r
- SelectObject(hMemDC, bitmap);\r
- DrawScreen (hDC , hMemDC , rect);\r
- EndPaint(hwnd, &ps);\r
- break;\r
- }\r
- case WM_TIMER :\r
- {\r
- if (wParam == APP_TIMER)\r
- {\r
- InvalidateRect(hwnd, NULL, 1);\r
- }\r
- }\r
- case WM_ERASEBKGND:\r
- {\r
- SelectObject(hDC, hBlkBrush);\r
-\r
- PatBlt(\r
- hDC,\r
- 0,\r
- 0,\r
- rect.right,\r
- rect.bottom,\r
- PATCOPY);\r
- break;\r
- }\r
- case WM_DESTROY:\r
- {\r
- KillTimer (hwnd, APP_TIMER);\r
- DeleteObject(bitmap);\r
- ShowCursor(TRUE);\r
- PostQuitMessage(0);\r
- break;\r
- }\r
-\r
- // break out of screen-saver if any keyboard activity\r
- case WM_NOTIFY:\r
- case WM_SYSKEYDOWN:\r
- PostMessage(hwnd, WM_CLOSE, 0, 0);\r
- break;\r
-\r
- // break out of screen-saver if any mouse activity\r
- case WM_LBUTTONDOWN:\r
- case WM_LBUTTONUP:\r
- case WM_RBUTTONDOWN:\r
- case WM_RBUTTONUP:\r
- case WM_MBUTTONDOWN:\r
- case WM_MBUTTONUP:\r
- case WM_MOUSEMOVE:\r
- // If we've got a parent then we must be a preview\r
- if(GetParent(hwnd) != 0)\r
- return 0;\r
-\r
- if(fFirstTime)\r
- {\r
- GetCursorPos(&ptLast);\r
- fFirstTime = FALSE;\r
- }\r
-\r
- GetCursorPos(&ptCursor);\r
-\r
- // if the mouse has moved more than 3 pixels then exit\r
- if(abs(ptCursor.x - ptLast.x) >= 3 || abs(ptCursor.y - ptLast.y) >= 3)\r
- PostMessage(hwnd, WM_CLOSE, 0, 0);\r
-\r
- ptLast = ptCursor;\r
-\r
- return 0;\r
- }\r
-\r
- return DefWindowProc(hwnd, msg, wParam, lParam);\r
-}\r
-\r
-void InitSaver(HWND hwndParent)\r
-{\r
- WNDCLASS wc;\r
- ZeroMemory(&wc, sizeof(wc));\r
- wc.style = CS_HREDRAW | CS_VREDRAW;\r
- wc.lpfnWndProc = WndProc;\r
- wc.lpszClassName = APPNAME;\r
- wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);\r
- RegisterClass(&wc);\r
-\r
- if (hwndParent != 0)\r
- {\r
- RECT rect;\r
- GetClientRect(hwndParent, &rect);\r
- CreateWindow(APPNAME, APPNAME,\r
- WS_VISIBLE | WS_CHILD,\r
- 0, 0,\r
- rect.right,\r
- rect.bottom,\r
- hwndParent, 0,\r
- hInstance, NULL);\r
- fullscreen = FALSE;\r
- }\r
- else\r
- {\r
- HWND hwnd;\r
- hwnd = CreateWindowEx(WS_EX_TOPMOST,\r
- APPNAME,\r
- APPNAME,\r
- WS_VISIBLE | WS_POPUP,\r
- 0, 0,\r
- GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),\r
- HWND_DESKTOP, 0,\r
- hInstance, NULL);\r
-\r
- SetWindowPos(hwnd,\r
- 0, 0, 0, 0, 0,\r
- SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_SHOWWINDOW);\r
-\r
- ShowCursor(FALSE);\r
- fullscreen = TRUE;\r
- }\r
-}\r
-\r
-void ParseCommandLine(PSTR szCmdLine, int *chOption, HWND *hwndParent)\r
-{\r
- int ch = *szCmdLine++;\r
-\r
- if(ch == '-' || ch == '/')\r
- ch = *szCmdLine++;\r
-\r
- if(ch >= 'A' && ch <= 'Z')\r
- ch += 'a' - 'A';\r
-\r
- *chOption = ch;\r
- ch = *szCmdLine++;\r
-\r
- if(ch == ':')\r
- ch = *szCmdLine++;\r
-\r
- while(ch == ' ' || ch == '\t')\r
- ch = *szCmdLine++;\r
-\r
- if(isdigit(ch))\r
- {\r
- unsigned int i = atoi(szCmdLine - 1);\r
- *hwndParent = (HWND)i;\r
- }\r
- else\r
- *hwndParent = 0;\r
-}\r
-\r
-void Configure(void)\r
-{\r
- TCHAR szTitle[256];\r
- TCHAR szText[256];\r
-\r
- LoadString(hInstance,\r
- IDS_TITLE,\r
- szTitle,\r
- 256);\r
-\r
- LoadString(hInstance,\r
- IDS_TEXT,\r
- szText,\r
- 256);\r
-\r
- MessageBox(0,\r
- szText,\r
- szTitle,\r
- MB_OK | MB_ICONWARNING);\r
-}\r
-\r
-int WINAPI WinMain (HINSTANCE hInst,\r
- HINSTANCE hPrev,\r
- LPSTR lpCmdLine,\r
- int iCmdShow)\r
-{\r
- HWND hwndParent;\r
- UINT nPreviousState;\r
- int chOption;\r
- MSG Message;\r
-\r
- hInstance = hInst;\r
-\r
- ParseCommandLine(lpCmdLine, &chOption, &hwndParent);\r
-\r
- SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0);\r
-\r
- switch (chOption)\r
- {\r
- case 's':\r
- InitSaver(0);\r
- break;\r
-\r
- case 'p':\r
- InitSaver(hwndParent);\r
- break;\r
-\r
- case 'c':\r
- default:\r
- Configure();\r
- return 0;\r
- }\r
-\r
- while (GetMessage(&Message, 0, 0, 0))\r
- DispatchMessage(&Message);\r
-\r
- SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0);\r
-\r
- return Message.wParam;\r
-}\r
+/*
+ * Copyright 2003 J Brown
+ * Copyright 2006 Eric Kohl
+ * Copyright 2007 Marc Piulachs (marc.piulachs@codexchange.net)
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#include <windows.h>
+#include <tchar.h>
+#include "resource.h"
+
+#define RANDOM( min, max ) ((rand() % (int)(((max)+1) - (min))) + (min))
+
+#define APPNAME _T("Logon")
+#define APP_TIMER 1
+#define APP_TIMER_INTERVAL 2000
+
+#define BITMAP_HEIGHT 240;
+#define BITMAP_WIDTH 340
+
+HINSTANCE hInstance;
+
+BOOL fullscreen = FALSE;
+
+void DrawScreen (HDC hdc, HDC hMemDC , RECT rect)
+{
+ int x;
+ int y;
+ int width = BITMAP_WIDTH;
+ int height = BITMAP_HEIGHT;
+
+ if (!fullscreen)
+ {
+ width = width / 20;
+ height = height / 20;
+ }
+
+ x = RANDOM (0, rect.right - width);
+ y = RANDOM (0, rect.bottom - height);
+
+ BitBlt(
+ hdc,
+ x,
+ y,
+ width,
+ height,
+ hMemDC,
+ 0,
+ 0,
+ SRCCOPY);
+}
+
+HBITMAP GetScreenSaverBitmap (void)
+{
+ OSVERSIONINFOEX osvi;
+
+ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ GetVersionEx ((OSVERSIONINFO *) &osvi);
+
+ switch(osvi.wProductType)
+ {
+ case VER_NT_WORKSTATION:
+ return LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_WORKSTATION));
+ break;
+ default:
+ return LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_SERVER));
+ break;
+ }
+}
+
+LRESULT WINAPI WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ static POINT ptLast;
+ static POINT ptCursor;
+ static BOOL fFirstTime = TRUE;
+
+ static PAINTSTRUCT ps;
+ static RECT rect;
+ static HDC hDC;
+ static HDC hMemDC;
+ static HBRUSH hBlkBrush;
+ static HBITMAP bitmap;
+
+ switch (msg)
+ {
+ case WM_CREATE:
+ {
+ hDC = GetDC(hwnd);
+ hBlkBrush = (HBRUSH) GetStockObject(BLACK_BRUSH);
+ hMemDC = CreateCompatibleDC(hDC);
+ GetClientRect(hwnd, &rect);
+
+ bitmap = GetScreenSaverBitmap ();
+
+ if(bitmap == NULL)
+ {
+ MessageBox(
+ hwnd,
+ _T("Fatal Error: Could not load bitmap"),
+ _T("Error"),
+ MB_OK | MB_ICONEXCLAMATION);
+ }
+
+ SetTimer (
+ hwnd,
+ APP_TIMER,
+ APP_TIMER_INTERVAL,
+ NULL);
+
+ break;
+ }
+ case WM_PAINT:
+ {
+ hDC = BeginPaint(hwnd, &ps);
+ SelectObject(hMemDC, bitmap);
+ DrawScreen (hDC , hMemDC , rect);
+ EndPaint(hwnd, &ps);
+ break;
+ }
+ case WM_TIMER :
+ {
+ if (wParam == APP_TIMER)
+ {
+ InvalidateRect(hwnd, NULL, 1);
+ }
+ }
+ case WM_ERASEBKGND:
+ {
+ SelectObject(hDC, hBlkBrush);
+
+ PatBlt(
+ hDC,
+ 0,
+ 0,
+ rect.right,
+ rect.bottom,
+ PATCOPY);
+ break;
+ }
+ case WM_DESTROY:
+ {
+ KillTimer (hwnd, APP_TIMER);
+ DeleteObject(bitmap);
+ ShowCursor(TRUE);
+ PostQuitMessage(0);
+ break;
+ }
+
+ // break out of screen-saver if any keyboard activity
+ case WM_NOTIFY:
+ case WM_SYSKEYDOWN:
+ PostMessage(hwnd, WM_CLOSE, 0, 0);
+ break;
+
+ // break out of screen-saver if any mouse activity
+ case WM_LBUTTONDOWN:
+ case WM_LBUTTONUP:
+ case WM_RBUTTONDOWN:
+ case WM_RBUTTONUP:
+ case WM_MBUTTONDOWN:
+ case WM_MBUTTONUP:
+ case WM_MOUSEMOVE:
+ // If we've got a parent then we must be a preview
+ if(GetParent(hwnd) != 0)
+ return 0;
+
+ if(fFirstTime)
+ {
+ GetCursorPos(&ptLast);
+ fFirstTime = FALSE;
+ }
+
+ GetCursorPos(&ptCursor);
+
+ // if the mouse has moved more than 3 pixels then exit
+ if(abs(ptCursor.x - ptLast.x) >= 3 || abs(ptCursor.y - ptLast.y) >= 3)
+ PostMessage(hwnd, WM_CLOSE, 0, 0);
+
+ ptLast = ptCursor;
+
+ return 0;
+ }
+
+ return DefWindowProc(hwnd, msg, wParam, lParam);
+}
+
+void InitSaver(HWND hwndParent)
+{
+ WNDCLASS wc;
+ ZeroMemory(&wc, sizeof(wc));
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = WndProc;
+ wc.lpszClassName = APPNAME;
+ wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ RegisterClass(&wc);
+
+ if (hwndParent != 0)
+ {
+ RECT rect;
+ GetClientRect(hwndParent, &rect);
+ CreateWindow(APPNAME, APPNAME,
+ WS_VISIBLE | WS_CHILD,
+ 0, 0,
+ rect.right,
+ rect.bottom,
+ hwndParent, 0,
+ hInstance, NULL);
+ fullscreen = FALSE;
+ }
+ else
+ {
+ HWND hwnd;
+ hwnd = CreateWindowEx(WS_EX_TOPMOST,
+ APPNAME,
+ APPNAME,
+ WS_VISIBLE | WS_POPUP,
+ 0, 0,
+ GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),
+ HWND_DESKTOP, 0,
+ hInstance, NULL);
+
+ SetWindowPos(hwnd,
+ 0, 0, 0, 0, 0,
+ SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_SHOWWINDOW);
+
+ ShowCursor(FALSE);
+ fullscreen = TRUE;
+ }
+}
+
+VOID ParseCommandLine(LPWSTR szCmdLine, UCHAR *chOption, HWND *hwndParent)
+{
+ UCHAR ch = *szCmdLine++;
+
+ if(ch == '-' || ch == '/')
+ ch = *szCmdLine++;
+
+ if(ch >= 'A' && ch <= 'Z')
+ ch += 'a' - 'A'; //convert to lower case
+
+ *chOption = ch;
+ ch = *szCmdLine++;
+
+ if(ch == ':')
+ ch = *szCmdLine++;
+
+ while(ch == ' ' || ch == '\t')
+ ch = *szCmdLine++;
+
+ if(isdigit(ch))
+ {
+ unsigned int i = _wtoi(szCmdLine - 1);
+ *hwndParent = (HWND)i;
+ }
+ else
+ *hwndParent = NULL;
+}
+
+void Configure(void)
+{
+ TCHAR szTitle[256];
+ TCHAR szText[256];
+
+ LoadString(hInstance,
+ IDS_TITLE,
+ szTitle,
+ 256);
+
+ LoadString(hInstance,
+ IDS_TEXT,
+ szText,
+ 256);
+
+ MessageBox(0,
+ szText,
+ szTitle,
+ MB_OK | MB_ICONWARNING);
+}
+
+int CALLBACK wWinMain (HINSTANCE hInst,
+ HINSTANCE hPrev,
+ LPWSTR lpCmdLine,
+ int iCmdShow)
+{
+ HWND hwndParent;
+ UINT nPreviousState;
+ UCHAR chOption;
+ MSG Message;
+
+ hInstance = hInst;
+
+ ParseCommandLine(lpCmdLine, &chOption, &hwndParent);
+
+ SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0);
+
+ switch (chOption)
+ {
+ case 's':
+ InitSaver(0);
+ break;
+
+ case 'p':
+ InitSaver(hwndParent);
+ break;
+
+ case 'c':
+ default:
+ Configure();
+ return 0;
+ }
+
+ while (GetMessage(&Message, 0, 0, 0))
+ DispatchMessage(&Message);
+
+ SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0);
+
+ return Message.wParam;
+}