#include "servman.h"\r
\r
extern HWND hListView;\r
+extern HWND hMainWnd;\r
\r
-BOOL DoStartService(VOID)\r
+BOOL DoStartService(HWND hProgDlg)\r
{\r
+ HWND hProgBar;\r
SC_HANDLE hSCManager;\r
SC_HANDLE hSc;\r
SERVICE_STATUS_PROCESS ServiceStatus;\r
ENUM_SERVICE_STATUS_PROCESS *Service = NULL;\r
LVITEM item;\r
- DWORD BytesNeeded;\r
+ DWORD BytesNeeded = 0;\r
INT ArgCount = 0;\r
- BOOL Loop = 10; //FIXME: testing value. needs better control\r
+ DWORD Loop = 5; //FIXME: testing value. needs better control\r
\r
item.mask = LVIF_PARAM;\r
item.iItem = GetSelectedItem();\r
/* copy pointer to selected service */\r
Service = (ENUM_SERVICE_STATUS_PROCESS *)item.lParam;\r
\r
+ /* set the progress bar range and step */\r
+ hProgBar = GetDlgItem(hProgDlg, IDC_SERVCON_PROGRESS);\r
+ SendMessage(hProgBar, PBM_SETRANGE, 0, MAKELPARAM(0, Loop));\r
+ SendMessage(hProgBar, PBM_SETSTEP, (WPARAM)1, 0);\r
+\r
/* open handle to the SCM */\r
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);\r
if (hSCManager == NULL)\r
}\r
\r
/* query the state of the service */\r
- if (! QueryServiceStatusEx(\r
- hSc,\r
- SC_STATUS_PROCESS_INFO,\r
- (LPBYTE)&ServiceStatus,\r
- sizeof(SERVICE_STATUS_PROCESS),\r
- &BytesNeeded))\r
+ if (! QueryServiceStatusEx(hSc,\r
+ SC_STATUS_PROCESS_INFO,\r
+ (LPBYTE)&ServiceStatus,\r
+ sizeof(SERVICE_STATUS_PROCESS),\r
+ &BytesNeeded))\r
{\r
GetError(0);\r
return FALSE;\r
\r
/* loop whilst service is not running */\r
/* FIXME: needs more control adding. 'Loop' is temparary */\r
- while (ServiceStatus.dwCurrentState == SERVICE_START_PENDING || !Loop)\r
+ while (ServiceStatus.dwCurrentState != SERVICE_RUNNING || !Loop)\r
{\r
+ /* increment the progress bar */\r
+ SendMessage(hProgBar, PBM_STEPIT, 0, 0);\r
+\r
/* wait before checking status */\r
- Sleep(ServiceStatus.dwWaitHint);\r
+ Sleep(ServiceStatus.dwWaitHint / 8);\r
\r
/* check status again */\r
if (! QueryServiceStatusEx(\r
CloseServiceHandle(hSc);\r
\r
if (ServiceStatus.dwCurrentState == SERVICE_RUNNING)\r
+ {\r
+ SendMessage(hProgBar, PBM_DELTAPOS, Loop, 0);\r
+ Sleep(1000);\r
return TRUE;\r
+ }\r
else\r
return FALSE;\r
\r