:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / subsys / system / gstart / gstart.c
1 /* $Id$
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 */