2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS runonce.exe
4 * FILE: base/system/runonce/runonce.c
5 * PROGRAMMER: Dmitry Chapyshev (dmitry@reactos.org)
14 StartApplication(LPVOID lpDlg
)
16 HWND hList
= GetDlgItem((HWND
)lpDlg
, IDC_COMP_LIST
);
17 INT Index
, Count
= SendMessage(hList
, LB_GETCOUNT
, 0, 0);
18 PROCESS_INFORMATION pi
;
20 TCHAR szData
[MAX_PATH
];
22 for (Index
= 0; Index
< Count
; Index
++)
24 SendMessage(hList
, LB_GETTEXT
, Index
, (LPARAM
)szData
);
26 ZeroMemory(&si
, sizeof(si
));
28 si
.wShowWindow
= SW_SHOW
;
30 if (!CreateProcess(NULL
, szData
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
))
33 WaitForSingleObjectEx(pi
.hProcess
, INFINITE
, TRUE
);
35 CloseHandle(pi
.hProcess
);
36 CloseHandle(pi
.hThread
);
39 RegDeleteKey(HKEY_LOCAL_MACHINE
,
40 _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\Setup"));
42 PostMessage((HWND
)lpDlg
, WM_CLOSE
, 0, 0);
51 TCHAR szAppPath
[MAX_PATH
], szData
[MAX_PATH
];
52 DWORD dwIndex
, dwSize
, dwType
, dwData
, dwThreadId
;
55 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
,
56 _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\Setup"),
59 &hKey
) == ERROR_SUCCESS
)
61 for (dwIndex
= 0; ; dwIndex
++)
63 dwSize
= sizeof(szAppPath
);
64 dwData
= sizeof(szData
) / sizeof(TCHAR
);
66 if (RegEnumValue(hKey
,
73 &dwData
) == ERROR_SUCCESS
)
75 if (dwType
!= REG_SZ
) continue;
77 SendMessage(GetDlgItem(hDlg
, IDC_COMP_LIST
), LB_ADDSTRING
, 0, (LPARAM
)szData
);
84 CloseHandle(CreateThread(NULL
,
95 RunOnceDlgProc(HWND hDlg
, UINT Msg
, WPARAM wParam
, LPARAM lParam
)
113 _tWinMain(HINSTANCE hInst
, HINSTANCE hPrevInst
, LPTSTR lpCmdLine
, INT nCmdShow
)
115 LPCTSTR lpCmd
= GetCommandLine();
116 TCHAR szAppPath
[MAX_PATH
], szData
[MAX_PATH
];
117 DWORD dwIndex
, dwSize
, dwType
, dwData
;
118 PROCESS_INFORMATION pi
;
120 BOOL bRunApps
= FALSE
;
125 while (*lpCmd
&& *lpCmd
!= _T('/') && *lpCmd
!= _T('-')) lpCmd
++;
127 if (*++lpCmd
== _T('r')) bRunApps
= TRUE
;
133 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
,
134 _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce"),
137 &hKey
) == ERROR_SUCCESS
)
139 for (dwIndex
= 0; ; dwIndex
++)
141 dwSize
= sizeof(szAppPath
);
142 dwData
= sizeof(szData
) / sizeof(TCHAR
);
144 if (RegEnumValue(hKey
,
151 &dwData
) == ERROR_SUCCESS
)
153 RegDeleteValue(hKey
, szAppPath
);
155 if (dwType
!= REG_SZ
) continue;
157 ZeroMemory(&si
, sizeof(si
));
159 si
.wShowWindow
= SW_SHOW
;
161 if (!CreateProcess(NULL
, szData
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
))
164 WaitForSingleObjectEx(pi
.hProcess
, INFINITE
, TRUE
);
166 CloseHandle(pi
.hProcess
);
167 CloseHandle(pi
.hThread
);
177 DialogBox(hInst
, MAKEINTRESOURCE(IDD_RUNONCE_DLG
), NULL
, RunOnceDlgProc
);