2002-07-04 David Welch <welch@computer2.darkstar.org>
[reactos.git] / reactos / subsys / system / gstart / gstart.c
1 /* $Id: gstart.c,v 1.1 2002/07/04 19:56:36 dwelch Exp $
2 *
3 * PROJECT : ReactOS Operating System
4 * DESCRIPTION: ReactOS GUI Startup
5 * LICENSE : See top level directory
6 *
7 */
8 #define NTOS_MODE_USER
9 #include <ntos.h>
10 #include <windows.h>
11 #include <stdarg.h>
12 #include <string.h>
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <ctype.h>
16
17 int ExecuteProcess(char* name, char* cmdline)
18 {
19 PROCESS_INFORMATION ProcessInformation;
20 STARTUPINFO StartupInfo;
21 BOOL ret;
22 CHAR fullname[260];
23 PCHAR p;
24
25 /* append '.exe' if needed */
26 strcpy (fullname, name);
27 p = strrchr (fullname, '.');
28 if ((p == NULL) || (_stricmp (p, ".exe") != 0))
29 {
30 strcat (fullname, ".exe");
31 }
32
33 memset(&StartupInfo, 0, sizeof(StartupInfo));
34 StartupInfo.cb = sizeof (STARTUPINFO);
35 StartupInfo.lpTitle = name;
36 if( cmdline && *cmdline )
37 *(cmdline-1) = ' ';
38 ret = CreateProcessA(fullname,
39 name,
40 NULL,
41 NULL,
42 FALSE,
43 0,
44 NULL,
45 NULL,
46 &StartupInfo,
47 &ProcessInformation);
48 if (ret)
49 {
50 WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
51 CloseHandle(ProcessInformation.hProcess);
52 CloseHandle(ProcessInformation.hThread);
53 }
54 return(ret);
55 }
56
57 int main(int argc, char* argv[])
58 {
59 HDC Desktop;
60 HBRUSH Pen;
61
62 GdiDllInitialize (NULL, DLL_PROCESS_ATTACH, NULL);
63
64 /* Set up a DC called Desktop that accesses DISPLAY */
65 Desktop = CreateDCA("DISPLAY", NULL, NULL, NULL);
66 if (Desktop == NULL)
67 {
68 return 1;
69 }
70
71 Pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255));
72 SelectObject(Desktop, Pen);
73 Rectangle(Desktop, 0, 0, 640, 480);
74
75 if (argc > 1)
76 {
77 ExecuteProcess(argv[1], "");
78 }
79 else
80 {
81 Sleep(50);
82 }
83
84 DeleteDC(Desktop);
85
86 return(0);
87 }
88
89 /* EOF */