// // Purpose: // The service code // // Parameters: // dwArgc - Number of arguments in the lpszArgv array // lpszArgv - Array of strings. The first string is the name of // the service and subsequent strings are passed by the process // that called the StartService function to start the service. // // Return value: // None // VOID ServiceInit(DWORD dwArgc, LPTSTR* lpszArgv) { // Create an event. The control handler function, ServiceCtrlHandler, // signals this event when it receives the stop control code. ghServiceStopEvent = CreateEvent( NULL, // default security attributes TRUE, // manual reset event FALSE, // not signaled NULL); // no name if (ghServiceStopEvent == NULL) { ServiceReportStatus(SERVICE_STOPPED, NO_ERROR, 0); return; } InitModulePath(); CreateLogFile(); // Write the service arguments to the registry key: // HKEY_USERS\.DEFAULT\dotnetTests\ServiceController\<ServiceName>\ServiceArguments // to verify that they were correctly passed through. std::wstring keyPath = L".DEFAULT\\dotnetTests\\ServiceController\\"; keyPath += gServiceName; HKEY hKey; LONG result = RegCreateKeyEx( HKEY_USERS, keyPath.c_str(), 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (result != ERROR_SUCCESS) { LogMessage(L"warning: failed to open or create registry key 'HKEY_USERS\\%s' (%d)\n", keyPath.c_str(), result); } else { // Join the arguments array, separating each argument with a comma std::wstring argsString; DWORD i = 1; for (; i < dwArgc - 1; i++) { argsString += lpszArgv[i]; argsString += L','; } if (i < dwArgc) { argsString += lpszArgv[i]; } // Write the result to the value "ServiceArguments" LPCTSTR valueName = L"ServiceArguments"; result = RegSetValueEx( hKey, valueName, 0, REG_SZ, (const BYTE*) argsString.c_str(), (DWORD) ((argsString.length() + 1) * sizeof(wchar_t))); if (result != ERROR_SUCCESS) { LogMessage(L"warning: failed to set value '%s' = '%s' in registry key 'HKEY_USERS\\%s' (%d)\n", valueName, argsString.c_str(), keyPath.c_str(), result); } RegCloseKey(hKey); } // Report running status when initialization is complete. ServiceReportStatus(SERVICE_RUNNING, NO_ERROR, 0); while (1) { // Check whether to stop the service. // If the tests haven't finished within 90 seconds, just end the program anyways. DWORD error = WaitForSingleObject(ghServiceStopEvent, 90000); // We're stopping, delete the log file DWORD logError = DeleteLogFile(); // If WaitForSingleObject fails, use that code. // Otherwise use the result of DeleteLogFile. if (error == ERROR_SUCCESS) { error = logError; } ServiceReportStatus(SERVICE_STOPPED, error, 0); return; } }
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 ///工具栏创建 m_imageList.Create(16,16,ILC_COLOR32|ILC_MASK,0,0); m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_LEFT));//0 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_MIDDLE));//1 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_RIGHT));//2 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_TOP));//6 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_BOTTOM));//7 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_WIDTH));//3 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_HEIGHT));//4 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_SAMESIZE));//5 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_HORI));//8 m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_VERI));//9 UINT btnIDs[12]; btnIDs[0]=IDI_ICON_LEFT; btnIDs[1]=IDI_ICON_MIDDLE; btnIDs[2]=IDI_ICON_RIGHT; btnIDs[3]=IDI_ICON_TOP; btnIDs[4]=IDI_ICON_BOTTOM; btnIDs[5]=ID_SEPARATOR; btnIDs[6]=IDI_ICON_WIDTH; btnIDs[7]=IDI_ICON_HEIGHT; btnIDs[8]=IDI_ICON_SAMESIZE; btnIDs[9]=ID_SEPARATOR; btnIDs[10]=IDI_ICON_HORI; btnIDs[11]=IDI_ICON_VERI; m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_NOALIGN | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); m_wndToolBar.SetButtons(btnIDs,12); m_wndToolBar.SetButtonText(0,toolLeftText); m_wndToolBar.SetButtonText(1,toolMiddleText); m_wndToolBar.SetButtonText(2,toolRightText); m_wndToolBar.SetButtonText(3,toolTopText); m_wndToolBar.SetButtonText(4,toolBottomText); m_wndToolBar.SetButtonText(6,toolWidthText); m_wndToolBar.SetButtonText(7,toolHeightText); m_wndToolBar.SetButtonText(8,toolSameSizeText); m_wndToolBar.SetButtonText(10,toolHorText); m_wndToolBar.SetButtonText(11,toolVerText); m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS); /* TBMETRICS tbmer; tbmer.cbSize=sizeof(TBMETRICS); tbmer.dwMask=TBMF_BUTTONSPACING; tbmer.cxButtonSpacing=5;//设置间隔 m_wndToolBar.GetToolBarCtrl().SetMetrics(&tbmer); */ m_wndToolBar.GetToolBarCtrl().SetImageList(&m_imageList); CRect temp; m_wndToolBar.GetItemRect(0,&temp); m_wndToolBar.SetSizes(CSize(temp.Width(),temp.Height()),CSize(16,16)); //Make the toolbar dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP); EnableDocking(CBRS_ALIGN_TOP); DockControlBar(&m_wndToolBar); ////////////////////////////去掉默认菜单栏 SetMenu(NULL); DestroyMenu(m_hMenuDefault); /////////////////////////// LONG style=::GetWindowLong(this->m_hWnd,GWL_STYLE);//取消标题栏 style &= ~WS_CAPTION; SetWindowLong(m_hWnd,GWL_STYLE,style); // GetWindowPlacement(&m_oldWindowPlaceMent); // FullScreen(); /////////////////////////////////////// theApp.ReadLogicVariablesFromFile(); SetTimer(AUTOSHUTDOWN,1000,NULL); /////////////////////// DeleteLogFile(); ////////////////////// AddTrayIcon(); /////////////// return 0; }